有什么方法可以取消 dojo 中正在进行的上传吗?

Is there any way to cancel an in-progress upload in dojo?

我有一个文件上传器可以处理非常大的文件。很多时候用户会取消上传。似乎没有任何方法可以让浏览器取消正在处理它的 XHR POST。因此,progress 和 complete 事件会在很晚的时候触发,上传才真正完成。据推测,上传器中一定有一个 XHR 对象嵌入我可以调用中止的地方,但我在 API 文档或上传器对象的控制台转储中看不到任何内容。

如果您的目标是 HTML5 上传器(而不是 Iframe 或 Flash 版本),那么您可以这样做:

  • 使用以下内容创建一个新的上传器小部件(代码未测试,可能需要一些调整):

define(['dojo/_base/declare', 'dojox/form/Uploader'], function(declare, Uploader) {
  return declare([Uploader], {
    xhrRequest: null,
    createXhr: function() {
      this.xhrRequest = this.inherited(arguments);
      return this.xhrRequest;
    },
    cancel: function() {
      if (this.xhrRequest && this.xhrRequest.abort) {
        this.xhrRequest.abort();
      }
    }
  });
});

  • 使用您的新小部件而不是 dojox.form.Uploader
  • 取消上传时调用cancel方法

但请记住:这 与 HTML5 上传器一起使用。