我有一个常规的 JSP/Servlet/Java 网络应用程序,用于从移动设备上传图片。我正在使用 Apache Commons 库进行上传。应用程序托管在 WebSphere Application Server 7.0 上。
一切正常,用户可以上传几张总计 8MB 或更多的图像,如果他有非常好的/强信号/连接或良好的 WiFi。
当用户处于 3G/4G 信号/连接较差的位置时,就会出现问题。他得到诸如“非法状态异常”或一些超时错误之类的错误,并且在某些情况下,移动浏览器只是停留在提交页面上,进度条不再移动。
关于如何“优雅地”处理这个问题有什么建议吗?比如有没有办法在一段时间后进行干预,让用户可以选择提交没有文件附件的表单(即只提交表单文本字段)?也欢迎任何其他建议。
更新:下面的 setTimeout 解决方案对我有用。另一个缺失的部分是我必须发出“浏览器停止”命令来停止正在进行的原始提交,然后才能发出重新提交。否则,我的重新提交命令将被浏览器忽略。
最佳答案
这里的用例很简单 - 如果上传没有在 N 分钟内完成,使用 javascript 删除/清除该字段并重新发送表单。
您不需要在基本实现中控制上传,只需安全地假设如果您设置超时重新发送,如果第一次尝试成功并重新加载页面就不会发生。
jQuery 伪代码:
setTimeout(function(){
$imageFieldNode.remove();
$form.trigger('submit');
},30000);//after 30 seconds
更高级的方法是使用现成的解决方案进行受控上传。他们是这样工作的:
- 开始上传
- js 以 GET 查询的间隔提示服务器以获取已接收的内容的大小。
- 每次获取信息时 - 它都会报告进度。
您可以使用这些库做很多事情。
关于java - 文件上传慢 : Can I remove file attachment from multipart POST data on the fly and just submit form text fields?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13688474/