【发布时间】:2012-10-17 07:08:41
【问题描述】:
我正在使用filepicker.makeDropPane 进行一些简单的上传。我在 filepicker.io 的 web documentation 的文档中找不到的一件事是取消正在进行的上传的方法。
直觉上我觉得onStart函数应该多传一个参数。一个表示上传的对象,该对象具有 cancel() 函数,调用该函数时会立即取消文件上传。这样的东西似乎不可用。
【问题讨论】:
标签: filepicker.io
我正在使用filepicker.makeDropPane 进行一些简单的上传。我在 filepicker.io 的 web documentation 的文档中找不到的一件事是取消正在进行的上传的方法。
直觉上我觉得onStart函数应该多传一个参数。一个表示上传的对象,该对象具有 cancel() 函数,调用该函数时会立即取消文件上传。这样的东西似乎不可用。
【问题讨论】:
标签: filepicker.io
我们实际上还没有这个功能,但它是有意义的。我会看看在这些方面添加一些东西,然后让你知道
【讨论】:
这是我想出的一个丑陋的黑客攻击,以防止不需要的返回文件以及其他一些关于进度和多个文件等的花哨的东西。你肯定想使用静态 js 文件包含,这样它就不会在你身上改变和破坏这个。
在您的进度处理程序中使用它:
var event = event || window.event;
// For firefox, go and grab the XHR progress event object.
if (typeof event == 'undefined' || event == null) {
if (typeof arguments.callee.caller.arguments[0] == 'object') {
event = arguments.callee.caller.arguments[0];
}
else {
event = arguments.callee.caller.arguments.callee.caller.arguments.callee.caller.arguments[0];
}
}
var sUploadId;
if (event.type.toLowerCase() == 'progress') {
// if we haven't already tagged this XHR object (one per file), tag it now
// if we receive further progress from this file, it will already have been tagged
if (!('id' in event.currentTarget)) {
sUploadId = goUploadProgress.files.length;
event.currentTarget.id = sUploadId;
goUploadProgress.files.push({id: sUploadId, total:event.total});
}
else {
sUploadId = event.currentTarget.id;
}
// get the loaded bytes for this file
goUploadProgress.files[sUploadId].loaded = event.loaded;
}
else {
// ignore readystatechange events
return;
}
我对此进行了修改以使其更适合该上下文,因此我可能犯了一个逻辑错误,但这是要点。您可以通过查找调用堆栈在 Firefox 中获取事件,并且可以将 id 附加到每个文件的 XHR 上传对象,该对象将一直存在直到完成。
我再说一遍,这是一个 hack!不要相信它不会坏。
【讨论】: