apache-flex 损坏的表单数据:提前结束

1u4esq0p  于 2022-10-31  发布在  Apache
关注(0)|答案(5)|浏览(201)

我正在尝试使用FileReference类上传文件。大于2MB的文件都可以正常工作,但小于2MB的文件会导致此错误:
“java.io. IO异常:损坏的表单数据:提前结束”
在服务器上,我使用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)
6ojccjat

6ojccjat1#

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

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

那么,您是否指定了可接受的最大POST大小?
P.S.好的,现在我发现是小上传导致了这个问题。在上面的FAQ链接中有一个专门解决上传问题的部分,包括一些有用的方法来隔离原因(客户端,浏览器,Web服务器,库)。试试看吧。
安装一个Firefox插件(篡改数据或Firebug),它可以显示发送到服务器的请求。可以帮助你了解〈2M和〉2M上传之间是否有什么不同。
P.P.S.文件是否具有相同的结构?会不会是较小的文件具有不同的数据(例如特殊符号),从而破坏了Flash库?例如,尝试仅上传包含空格的小文件。

xuo3flqw

xuo3flqw2#

@弗拉基米尔:
我已经使用了HTTP嗅探器来检查后请求,它正在发送整个文件和后请求格式是正确的。我已经尝试了许多不同的文件(.jpg,. mp3等),这是〈2 MB,没有一个工作。
最大帖子大小设置为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,我得到了相同的结果。
还有别的主意吗?

2wnc66cl

2wnc66cl3#

这是因为发送请求时使用了“传输编码:chunked”报头,而不是Content-length报头。许多服务器不理解chunked内容,O 'reilly也不理解。用嗅探器检查你的请求是否是用Transfer编码报头发送的。我不知道任何解决方案。

epggiuax

epggiuax4#

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

pkwftd7m

pkwftd7m5#

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

相关问题