Korrupte Daten in das Formular: vorzeitige Beendigung
Ich versuche zum hochladen von Dateien mithilfe der FileReference-Klasse. Dateien >2MB arbeiten alle korrekt, aber die Dateien <2 MB diesen Fehler verursachen:
"java.io.IOException: Korrupte Daten in das Formular: vorzeitige Beendigung"
Auf dem server bin ich mit der com.oreilly.servlet-Paket, die Anforderung zu verarbeiten.
Habe ich dieses Paket viele Male erfolgreich mit Datei-uploads von flex, aber für einige Grund, nun habe ich dieses problem.
Hier wird der stack-trace für ein paar mehr Infos:
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)
- Wenn Sie gefunden haben, eine Antwort auf Ihre eigene Frage, sollten Sie post die Antwort als Antwort und akzeptieren, anstatt eine änderung des Titels.
Du musst angemeldet sein, um einen Kommentar abzugeben.
http://www.servlets.com/cos/faq.html
, Warum bei der Verwendung von com.oreilly.- servlet.MultipartRequest oder MultipartParser großen uploads nicht?
Die Klassen selbst wurden speziell entwickelt, um keine maximale upload Größe beschränken (im Gegensatz zu den meisten anderen Datei-upload-Dienstprogramme), aber für Ihre server-Schutz der Konstruktor können Sie eine maximale POST-Größe zu akzeptieren. Alle hochladen, die größer als der Grenzwert ist eingestellt. Der standardmäßige Maximalwert beträgt 1 Meg. Für eine Diskussion der Schwierigkeiten, die ein server hat in der Benachrichtigung der Clients der Fehler, siehe die Diskussion in der Java-Servlet-Programmierung, 2. Auflage, Seite 119.
So, hast du die Angabe der maximalen POST-Größe zu akzeptieren?
P. S. Ok, jetzt sehe ich, dass es kleine uploads, die das problem verursachen. Auf den FAQ-link oben gibt es einen speziellen Abschnitt zur Fehlerbehebung uploads, darunter auch einige helful Methoden, die Ursache zu isolieren (client, browser, web-server, Bibliotheken). Probieren Sie diese aus.
Installieren Sie ein Firefox-plugin Tamper Data oder Firebug) zeigt, dass die Anfrage an den server. Kann Ihnen helfen, zu verstehen, wenn alles, was ist der Unterschied zwischen <2M und >2M-uploads.
P. P. S. die Dateien Sind von der gleichen Struktur? Könnte es sein, dass kleinere haben unterschiedliche Daten (z.B. Sonderzeichen), die Bruch-Flash-Bibliothek? Versuchen Sie zum hochladen von kleinen Dateien von nur Leerzeichen, zum Beispiel.
@Vladimir:
Benutzt habe ich einen http-sniffer, um zu überprüfen, die post-Anforderung, und senden Sie die gesamte Datei und die post-Anforderung-format korrekt ist. Ich habe versucht, viele verschiedene Dateien (.jpg -, .mp3 etc), die <2MB und niemand arbeiten.
Die maximale post-Größe auf 1,5 GB.
Hier ist, was die post-Anforderung ist:
Habe ich bestätigt, dass dies ein Serverseitiges Problem, als ich getestet habe, das servlet mit einem normalen html-Formular und ich bekomme die gleiche Ergebnisse.
Irgendwelche anderen Ideen?
Der Grund dafür ist, dass die Anfrage gesendet wurde mit einem "Transfer-Encoding: chunked" - header, anstatt einen Content-length-header. Viele Server nicht verstehen chunked content, und auch nicht o ' Reilly. Überprüfen Sie mit einem sniffer wenn Ihre Anfrage ist verschickt, mit den Transfer-encoding-header. Ich kenne keine Lösung für dieses.
Es scheint, dass es ist ein Fehler, der vorhanden ist bei der Verwendung von com.orielly.- servlet.Klasse MultipartRequest und die org.apache.struts2.dispatcher.ActionContextCleanUp-filter zusammen. Dies ist, was verursacht wurde kleine Datei-uploads zu scheitern.
Wenn Sie nicht mit structs dann kann es behoben werden durch löschen der Strukturen Bibliotheken aus dem Projekt Bibliothek .