有什么方法可以取消 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 上传器一起使用。
我有一个文件上传器可以处理非常大的文件。很多时候用户会取消上传。似乎没有任何方法可以让浏览器取消正在处理它的 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 上传器一起使用。