1

我有一个常规的 JSP/Servlet/Java Web 应用程序,用于从移动设备上传图片。我正在使用 Apache Commons 库进行上传。应用程序托管在 WebSphere Application Server 7.0 上。

一切正常,如果用户有非常好的/强信号/连接或良好的 WiFi,他可以上传几张总计 8MB 或更多的图像。

当用户位于 3G/4G 信号/连接不佳的位置时,就会出现问题。他收到诸如“非法状态异常”或一些超时错误之类的错误,在某些情况下,移动浏览器只是停留在提交页面上,进度条不再移动。

关于如何“优雅地”处理这个问题的任何建议?就像有没有办法在设定的时间后进行干预并让用户选择提交没有文件附件的表单(即只提交表单文本字段)?也欢迎任何其他建议。

更新:下面的 setTimeout 解决方案对我有用。另一个缺失的部分是我必须发出“浏览器停止”命令来停止正在进行的原始提交,然后才能发出重新提交。否则,我的重新提交命令将被浏览器忽略。

4

2 回答 2

2

此处的用例很简单 - 如果上传未在 N 分钟内完成,请使用 javascript 删除/清除该字段并重新发送表单。

您不需要在基本实现中控制上传,只需安全地假设如果您设置了超时重新发送,那么如果第一次尝试成功并且页面重新加载,则不会发生这种情况。

jQuery伪代码:

setTimeout(function(){
  $imageFieldNode.remove();
  $form.trigger('submit');
},30000);//after 30 seconds

更高级的方法是使用现成的解决方案进行受控上传。他们是这样工作的:

  1. 上传开始
  2. Node.js 以 GET 查询间隔提示服务器以获取已接收内容的大小。
  3. 每次它获取信息时 - 它都会报告进度。

您可以使用这些库做很多事情。

于 2012-12-03T18:16:00.007 回答
0

您可以考虑流行的网络邮件客户端中使用的方法(将文件附加到邮件时):

这些文件是在表单提交之前独立上传的(即之前),使用 javascript。每个文件都存储在一个临时目录中,上传成功后用户可以继续操作。上传状态会显示给用户,如果失败,主要操作(表单填写/提交)不会被中断。

于 2012-12-03T18:15:45.193 回答