【问题标题】:Java servlet and Ajax uploading files progress barJava servlet 和 Ajax 上传文件进度条
【发布时间】:2014-07-09 15:54:42
【问题描述】:

目前,我使用XmlHttpRequest 使用 HTML5 功能将文件上传到服务器。

有进度条:

xhr.upload.addEventListener('progress', function(e) {
var done = e.position || e.loaded, total = e.totalSize || e.total;
console.log(done);
});

...一切正常,但它不考虑通过服务器处理文件。因此,即使文件尚未创建,它也会显示 100% 已上传。

文件接收方是Java servlet,只有返回才能响应。所以这里没有办法计算它的响应留下的百分比。

有没有办法解决?

【问题讨论】:

  • 您将无法从 Java servlet 获得处理百分比。进度条达到 100% 后,将其更改为不确定的进度条以指示服务器正在处理,并在收到服务器响应时停止。
  • @abmitchell,有趣的建议。谢谢。

标签: java javascript ajax servlets


【解决方案1】:

如果服务器执行的处理需要很长时间,并且您想在处理过程中提供反馈,这里有一个解决方案的粗略概述。这需要一段时间才能实现,因此只有在处理速度较慢时才真正值得这样做。

  1. 修改您的 servlet 以异步完成其工作,并向客户端返回 201 Accepted 响应。
  2. 在服务器处理文件时,在对象上设置进度,如果您正在使用,通常是用 Spring 注入的 ConcurrentHashMap。
  3. 公开一个 API 来查询任务的当前进度,而不会阻止它完成。
  4. 在您的 javascript 中,轮询此 API,直到任务完成,并显示进度。

如果需要,您可以在第 1 步的响应中返回跟踪 ID。

【讨论】:

    猜你喜欢
    • 2011-05-10
    • 2011-06-18
    • 2013-12-01
    相关资源
    最近更新 更多