De corrompre les données de formulaire: fin prématurée
Je suis en train de télécharger des fichiers à l'aide de la classe FileReference. Fichiers >2 MO tout fonctionne correctement mais les fichiers <2MB l'origine de cette erreur:
"de java.io.IOException: Corrompre les données de formulaire: fin prématurée"
Sur le serveur, je suis en utilisant le com.oreilly.servlet paquet pour traiter la demande.
J'ai utilisé ce paquet plusieurs fois pour réussir à gérer les uploads de fichier de flex, mais pour une raison quelconque, je suis maintenant à avoir ce problème.
Ici est la trace de la pile pour plus d'info:
java.io.IOException: Corrupt form data: premature ending
at com.oreilly.servlet.multipart.MultipartParser.<init>(MultipartParser.java:205)
at com.oreilly.servlet.MultipartRequest.<init>(MultipartRequest.java:222)
at com.oreilly.servlet.MultipartRequest.<init>(MultipartRequest.java:173)
at com.mydomain.FileUploadServlet.doPost(FileUploadServlet.java:46)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:99)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:414)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
- Si vous avez trouvé une réponse à votre propre question, vous devez poster la réponse comme une réponse et de l'accepter, plutôt que de changer le titre.
Vous devez vous connecter pour publier un commentaire.
http://www.servlets.com/cos/faq.html
Pourquoi lors de l'utilisation de com.oreilly.servlet.MultipartRequest ou MultipartParser faire les gros téléchargements échec?
Les classes elles-mêmes ont été spécifiquement conçus pour ont pas de limite de taille de téléchargement maximale (contrairement à la plupart des autres de téléchargement de fichiers utilitaires), mais pour votre serveur de protection de l'constructeur permet de définir un maximum la taille de message à accepter. Tout chargement plus grande que la limite est interrompue. La valeur maximale par défaut est de 1 mo. Pour une discussion sur les difficultés d'un serveur de a à aviser un client de l'erreur, voir la discussion dans la Servlet Java Programmation, 2e Édition, page 119.
Donc, avez-vous préciser le maximum de la taille de message à accepter?
P. S. Ok, maintenant je vois que c'est petit uploads qui cause le problème. Sur le lien de la FAQ ci-dessus, il est une section de dépannage, les téléchargements, y compris certains très intéressant méthodes pour isoler la cause (le client, le navigateur, le serveur web, bibliothèques). Les essayer.
Installer un plugin Firefox (Sabotage de Données ou Firebug) qui montre la requête envoyée au serveur. Peut vous aider à comprendre si quelque chose est différent entre <2M et >2M uploads.
P. P. S. Sont les fichiers de la même structure? Se pourrait-il que les plus petits ont différentes données (par exemple, des symboles spéciaux) qui cassent Flash bibliothèque? Essayez d'envoyer de petits fichiers contenant des espaces, par exemple.
@Vladimir:
J'ai utilisé un http sniffer pour vérifier la demande de publication et d'envoyer le fichier en entier et le post le format de la requête est correcte. J'ai essayé beaucoup de différents fichiers.jpg, .mp3, etc) qui sont <2 MO et aucune travaillent.
Le maximum de la taille de message est fixée à 1,5 GO.
Voici ce que la demande de publication est:
J'ai confirmé que c'est un problème côté serveur que j'ai testé la servlet régulière d'un formulaire html et j'obtiens les mêmes résultats.
D'autres idées?
La raison de ceci est parce que la demande est envoyé avec un "Transfert de Encoding: chunked" en-tête, au lieu d'en-tête Content-length. De nombreux serveurs ne comprends pas chunked content, et ni ne o reilly. Vérifier avec un sniffer si votre demande est envoyé avec le codage de Transfert d'en-tête. Je ne connais pas de solution pour cela.
Il semble qu'il y est un bug qui existe lors de l'utilisation de com.orielly.servlet.MultipartRequest de la classe et de l'org.apache.struts2.répartiteur.ActionContextCleanUp filtre ensemble. C'est ce qu'a cause de petites les uploads de fichier à l'échec.
Si vous n'êtes pas à l'aide de structures, il peut être résolu par la suppression des structures des bibliothèques à partir de votre bibliothèque du projet .