Apache Commons文件上传超时仅适用于Firefox

use*_*964 8 upload servlets http request apache-commons-fileupload

我在Java项目中使用Apache commons fileupload 1.4库。我有一个具有经典形式的html部分,带有文件输入和一些隐藏字段。

我仅使用Firefox> = 52上载> 500ko左右的文件时遇到问题

它与Chrome或Internet Explorer中的10mo文件兼容。但是,使用Firefox,在提交表单后等待了几分钟,我超时了。

经过一些调试后,我看到造成超时的代码是:

List<FileItem> items = (new ServletFileUpload(new DiskFileItemFactory())).parseRequest(request);
Run Code Online (Sandbox Code Playgroud)

等待原因的部分是“ parseRequest”。

我尝试使用IntelliJ中的调试器调试请求的内容,但是无法以原始格式复制此请求对象的整个内容值。

在以下情况下可以正常工作:-Firefox:版本<= 52或文件大小<500ko(大约不是很精确)-Internet Explorer-Chrome

没有文件大小限制,这似乎取决于请求的大小,因为解析请求部分要花费太多时间...

在两种情况下,我都收到带有Firefox扩展名的HTTP请求。一个生成的文件上传失败的3mo文件(请求文件很大,是上传文件大小的3倍):https : //code.empreintesduweb.com/13561.html

一个生成的上传文件200ko有效(请求文件很小):https ://code.empreintesduweb.com/13560.html

实际上,主要区别在于在Chrome或IE中,我在请求标头中没有上传文件的原始内容:

具有以下部分的对象:obj stream .... endstream endobj

仅在Firefox中显示...

use*_*964 0

感谢您的所有回答。\n最后,我成功解决了这个问题,但事实上...并非如此。\n我注意到我的表单中有一些特定的内容。\n我有两个输入,一个标准文件输入,另一个在上传之前,它会接收一些奇怪的 js 以 base64 编码的文件内容。\n所以我一次获得了文件的原始内容,以及以 base64 编码的文件。为什么 ?!我不知道\xe2\x80\x99。

\n\n

但我删除了所有这些,用标准输入文件创建了一个新的简单干净的表单。\n我使用 ServletFileUpload 中的流 API,它可以工作,对于大文件只需要几秒钟。

\n\n

所以我不明白一切(例如为什么问题只出现在某些浏览器上),但我找到了解决方案;)

\n\n

谢谢 !

\n