rpdr lenguaje as3 java flex actionscript-3

java - lenguaje - Datos de formulario corruptos: final prematuro(Resuelto)



as3 lenguaje (4)

Estoy tratando de cargar archivos usando la clase FileReference. Los archivos> 2MB funcionan todos correctamente pero los archivos <2MB causan este error: "java.io.IOException: datos de formulario corruptos: terminación prematura"

En el servidor estoy usando el paquete com.oreilly.servlet para manejar la solicitud.

He utilizado este paquete muchas veces para manejar con éxito las cargas de archivos de flex, pero por alguna razón, ahora estoy teniendo este problema.

¿Algunas ideas?

Aquí está el seguimiento de la pila para más información:

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)

Actualizar:

Parece que existe un error al usar la clase com.orielly.servlet.MultipartRequest y el filtro org.apache.struts2.dispatcher.ActionContextCleanUp juntos. Esto es lo que causaba que las cargas de archivos pequeños fallaran.


@Vladimir:

He utilizado un sniffer http para verificar la solicitud de publicación y está enviando el archivo completo y el formato de solicitud de publicación es correcto. He probado muchos archivos diferentes (.jpg, .mp3, etc.) que son <2MB y ninguno está funcionando.

El tamaño máximo de publicación se establece en 1.5GB.

Aquí está lo que es la solicitud de publicación:

------------cH2ae0ei4ae0cH2ae0Ef1KM7gL6GI3 Content-Disposition: form-data; name="Filename" IMG0001.jpg ------------cH2ae0ei4ae0cH2ae0Ef1KM7gL6GI3 Content-Disposition: form-data; name="Filedata"; filename="IMG0001.jpg" Content-Type: application/octet-stream <file data here> ------------cH2ae0ei4ae0cH2ae0Ef1KM7gL6GI3 Content-Disposition: form-data; name="Upload" Submit Query ------------cH2ae0ei4ae0cH2ae0Ef1KM7gL6GI3--

He confirmado que este es un problema del lado del servidor ya que probé el servlet con un formulario html regular y obtengo los mismos resultados.

¿Alguna otra idea?


http://www.servlets.com/cos/faq.html

¿Por qué al usar com.oreilly.servlet.MultipartRequest o MultipartParser fallan las cargas grandes? Las clases se diseñaron específicamente para no tener un límite de tamaño máximo de carga (a diferencia de la mayoría de las otras utilidades de carga de archivos), pero para la protección de su servidor, el constructor le permite establecer un tamaño POST máximo para aceptar. Cualquier subida más grande que el límite se detiene. El máximo predeterminado es 1 Meg. Para una discusión de las dificultades que tiene un servidor para notificar a un cliente del error, vea la discusión en Java Servlet Programming, 2nd Edition, página 119.

Entonces, ¿especificó el tamaño máximo de POST para aceptar?

PD: Ok, ahora veo que son las cargas pequeñas las que causan el problema. En el enlace de Preguntas frecuentes, arriba, hay una sección dedicada a la resolución de problemas de cargas, incluidos algunos métodos útiles para aislar la causa (cliente, navegador, servidor web, bibliotecas). Pruébalos.

Instale un complemento de Firefox (Tamper Data o Firebug) que muestre la solicitud enviada al servidor. Puede ayudarte a entender si hay algo diferente entre <2M y> 2M de subida.

PPS son los archivos de la misma estructura? ¿Podría ser que los más pequeños tengan datos diferentes (por ejemplo, símbolos especiales) que rompan la biblioteca Flash? Intente cargar pequeños archivos de espacios solamente, por ejemplo.


El motivo es que la solicitud se envió con un encabezado "Transferir codificación: fragmentado" en lugar de un encabezado Content-length. Muchos servidores no entienden el contenido fragmentado, y tampoco lo hace o''reilly. Verifique con un rastreador si su solicitud ha sido enviada con el encabezado de codificación de Transferencia. No sé ninguna solución para esto.


Parece que existe un error al usar la clase com.orielly.servlet.MultipartRequest y el filtro org.apache.struts2.dispatcher.ActionContextCleanUp juntos. Esto es lo que causaba que las cargas de archivos pequeños fallaran.