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中显示...
感谢您的所有回答。\n最后,我成功解决了这个问题,但事实上...并非如此。\n我注意到我的表单中有一些特定的内容。\n我有两个输入,一个标准文件输入,另一个在上传之前,它会接收一些奇怪的 js 以 base64 编码的文件内容。\n所以我一次获得了文件的原始内容,以及以 base64 编码的文件。为什么 ?!我不知道\xe2\x80\x99。
\n\n但我删除了所有这些,用标准输入文件创建了一个新的简单干净的表单。\n我使用 ServletFileUpload 中的流 API,它可以工作,对于大文件只需要几秒钟。
\n\n所以我不明白一切(例如为什么问题只出现在某些浏览器上),但我找到了解决方案;)
\n\n谢谢 !
\n| 归档时间: |
|
| 查看次数: |
227 次 |
| 最近记录: |