La jetée de jette “Manque de contenu de type multipart demande” sur plusieurs parties du formulaire de demande
Je suis en cours d'exécution de la Jetée 9 (jetty-9.0.5.v20130815) serveur avec servlet-api 3.0.1 (javax.servlet:javax.servlet-api:3.0.1), ma servlet est configuré pour accepter multipart demandes.
web.xml -
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:fmt="http://java.sun.com/jsp/jstl/fmt"
xmlns:web="http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee">
<servlet>
<servlet-name>restapi</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
<multipart-form enable="true" />
<multipart-config>
<max-file-size>8428800</max-file-size>
<max-request-size>8428800</max-request-size>
<file-size-threshold>1048576</file-size-threshold>
</multipart-config>
</servlet>
</web-app>
applicationContext.xml -
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- one of the properties available; the maximum file size in bytes -->
<property name="maxUploadSize" value="8000000"/>
</bean>
Il met en œuvre un POSTE de commande qui doit recevoir un upload de fichier par le biais de HttpServletRequest
. Mais quand request.getParts()
est appelé, à cette exception se produit:
java.io.IOException: Missing content for multipart request
at org.eclipse.jetty.util.MultiPartInputStreamParser.parse(MultiPartInputStreamParser.java:493)
at org.eclipse.jetty.util.MultiPartInputStreamParser.getParts(MultiPartInputStreamParser.java:401)
at org.eclipse.jetty.server.Request.getParts(Request.java:2077)
at javax.servlet.http.HttpServletRequestWrapper.getParts(HttpServletRequestWrapper.java:351)
at javax.servlet.http.HttpServletRequestWrapper.getParts(HttpServletRequestWrapper.java:351)
Le client est une application iOS à l'aide de ASIFormDataRequest, mais je ne pense pas que le client a le problème, car il l'habitude de travailler avec Apache commons-fileupload.jar. Je ne suis pas de commutation que le serveur Jetty est multipart support pour la réception des fichiers.
Voici la demande, comme l'a intercepté par un proxy -
POST /mycommand HTTP/1.1
Host: localhost:8080
Proxy-Connection: close
Accept-Encoding: gzip
Content-Type: multipart/form-data; charset=utf-8; boundary=0xKhTmLbOuNdArY-849F4DA3-85DC-46F1-B182-44257808F0B9
Content-Length: 1568
Connection: close
--0xKhTmLbOuNdArY-849F4DA3-85DC-46F1-B182-44257808F0B9
Content-Disposition: form-data; name="param1"
text
--0xKhTmLbOuNdArY-849F4DA3-85DC-46F1-B182-44257808F0B9
Content-Disposition: form-data; name="data"; filename="file"
Content-Type: application/octet-stream
... DATA ...
--0xKhTmLbOuNdArY-849F4DA3-85DC-46F1-B182-44257808F0B9--
Des idées?
Oui,
text
était mon e-mail et DATA
a été un long données binaires (non lisible).Vous aurez besoin de saisir que plusieurs parties demande dans une manière qui montre le retour chariot/saut de ligne caractères est important dans la délimitation et le contenu. En supposant que la CR/LF caractères sont dans la position correcte, puis l'exemple ci-dessus fonctionne lorsqu'il est utilisé avec jetty 9.1, et je ne pense pas qu'il y avait des multipart correction de bugs après 9.0.5.
Avez-vous celui-ci? Je vais avoir le même problème aujourd'hui avec la Jetée de 9.2.3
Non, n'avait à le contourner.
OriginalL'auteur Kof | 2013-12-16
Vous devez vous connecter pour publier un commentaire.
Nous avons eu exactement le même problème, et après quelques heures de débogage, nous avons trouvé le problème.
Jetty se plaint parce que le InputStream qui contient le mulitpart message est vide. Le problème pour nous est que les deux Servlet 3.0-style multipart a été configuré (comme vous l'avez fait avec le
multipart-*
balises dansweb.xml
), et le Printemps a été configuré pour utiliser Commons FileUpload pour plusieurs parties de l'analyse. Cela a provoqué Commons FileUpload à consommer de l'InputStream avant Jetty il l'a fait dans leMultiPartInputStreamParser
La solution est simplement de supprimer Commons FileUpload depuis le classpath et configurer le Printemps à ne pas l'utiliser.
Bonne prise, j'ai enlevé
multipart-*
de web.xml et il travaille maintenant aveccommons-fileupload
.OriginalL'auteur Aleksander Blomskøld
L'erreur pour
"Manquant de contenu de type multipart demande"
est dû à un manque ou mal détectée première limite.Il y a eu de nombreux cas de bord (à partir de clients que mal de format multi-partie des messages) que Jetty compense. Toutefois, les informations que vous avez fournies sont insuffisantes pour savoir ce que la cause sous-jacente peut-être.
Pouvez-vous soumettre un rapport de bogue à bugs.eclipse.org en vertu de la RT/Jetty avec une capture wireshark de la circulation?
OriginalL'auteur Joakim Erdfelt
pour le printemps de démarrage de l'application, j'ai trouvé le même problème. - Je supprimer Commons FileUpload lib et ajouter aux propriétés:
pour la taille des fichiers
OriginalL'auteur z0mb1ek
Dans mon cas, j'ai eu le suivant ; lorsque j'ai commenté les lignes ci-dessous
dans
Il a travaillé.....après avoir commenté
OriginalL'auteur shareef