繁体   English   中英

表单数据损坏:过早结束

[英]Corrupt form data: premature ending

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

“ java.io.IOException:表单数据已损坏:提前结束”

在服务器上,我使用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)

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

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

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

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

附言:好的,现在我看到的是很小的上传量导致了问题。 在上面的FAQ链接上,有一个部分专门对上载进行故障排除,包括一些隔离原因的有用方法(客户端,浏览器,Web服务器,库)。 试试看

安装一个Firefox插件(篡改数据或Firebug),以显示发送到服务器的请求。 可以帮助您了解<2M和> 2M上传之间是否存在差异。

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

@弗拉基米尔:

我已使用http嗅探器检查过帐请求,并且它正在发送整个文件,并且过帐请求格式正确。 我尝试了许多小于2MB的文件(.jpg,.mp3等),但都无法正常工作。

最大帖子大小设置为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,并且得到了相同的结果。

还有其他想法吗?

这是因为请求是使用“传输编码:分块”标头而不是Content-length标头发送的。 许多服务器不了解分块的内容,o'illy也是如此。 用嗅探器检查您的请求是否已通过传输编码标头发送。 我不知道有什么解决办法。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM