腐败的表格数据:过早结束

时间:2008-10-27 14:53:06

标签: java actionscript-3 flex

我正在尝试使用FileReference类上传文件。文件> 2MB都正常工作但文件< 2MB导致此错误:

  

“java.io.IOException:Corrupt form data:earlymature ending”

在服务器上,我使用com.oreilly.servlet包来处理请求。

我多次使用这个包来成功处理flex的文件上传,但由于某种原因,现在我遇到了这个问题。

以下是更多信息的堆栈跟踪:

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)

5 个答案:

答案 0 :(得分:0)

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

为什么在使用com.oreilly.servlet.MultipartRequest或MultipartParser时大型上传失败? 这些类本身是专门设计的,没有最大上传大小限制(与大多数其他文件上传实用程序不同),但为了保护服务器,构造函数允许您设置最大的POST大小以接受。任何超过限制的上传都将暂停。默认最大值为1 Meg。有关服务器在通知客户端错误时遇到的困难的讨论,请参阅Java Servlet编程,第2版,第119页中的讨论。

那么,您是否指定了要接受的最大POST大小?

P.S。好的,现在我看到导致问题的是小上传。在上面的FAQ链接中,有一节专门用于对上传进行故障排除,包括一些帮助隔离原因的方法(客户端,浏览器,Web服务器,库)。试试吧。

安装Firefox插件(Tamper Data或Firebug),显示发送到服务器的请求。可以帮助您了解&lt; 2M和&gt; 2M上传之间是否有任何不同。

P.P.S。文件结构是否相同?可能是较小的那些具有破坏Flash库的不同数据(例如特殊符号)?例如,尝试上传小空间文件。

答案 1 :(得分:0)

@Vladimir:

我使用了一个http嗅探器来检查发布请求,它正在发送整个文件,并且发布请求格式是正确的。我已经尝试了许多不同的文件(.jpg,.mp3等),这些文件都是<2MB且没有一个正常工作。

最大帖子大小设置为1.5GB。

以下是发布请求的内容:

------------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--

我已经确认这是一个服务器端问题,因为我使用常规html表单测试了servlet,并得到了相同的结果。

还有其他想法吗?

答案 2 :(得分:0)

这是因为请求是使用“Transfer Encoding:chunked”标头发送的,而不是Content-length标头。许多服务器不理解分块内容,也不理解。如果您的请求是使用传输编码标头发送的,请使用嗅探器进行检查。我不知道任何解决方案。

答案 3 :(得分:0)

当使用com.orielly.servlet.MultipartRequest类和org.apache.struts2.dispatcher.ActionContextCleanUp过滤器时,似乎存在一个错误。这就是导致小文件上传失败的原因。

答案 4 :(得分:0)

如果您不使用结构,则可以通过从项目的库中删除结构库来解决。