Java servlet和Ajax上传文件进度条

时间:2014-07-09 15:54:42

标签: java javascript ajax servlets

目前,我使用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,只有在返回后才能响应。因此,没有办法计算其回复留下的百分比。

是否有办法绕过它?

1 个答案:

答案 0 :(得分:1)

如果服务器的处理需要很长时间,并且您希望在发生时提供反馈,那么这里是一个解决方案的大致轮廓。这需要一段时间才能实现,因此如果处理速度很慢,那么它真的值得做。

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