我filepicker.makeDropPane
用来玩一些简单的上传。我在 filepicker.io 的web 文档的文档中找不到的一件事是一种取消正在进行的上传的方法。
直觉上我觉得应该给onStart
函数传递一个额外的参数。表示上传的对象,该对象具有cancel()
在调用时会立即取消文件上传的功能。像这样的东西似乎不可用。
我filepicker.makeDropPane
用来玩一些简单的上传。我在 filepicker.io 的web 文档的文档中找不到的一件事是一种取消正在进行的上传的方法。
直觉上我觉得应该给onStart
函数传递一个额外的参数。表示上传的对象,该对象具有cancel()
在调用时会立即取消文件上传的功能。像这样的东西似乎不可用。
我们实际上还没有这个功能,但它是有道理的。我会看看在这些方面添加一些东西并让你知道
这是我想出的一个丑陋的黑客攻击,以防止不需要的返回文件以及其他一些关于进度和多个文件等的花哨的东西。你肯定想使用静态 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 上传对象,该对象将一直存在直到完成。
我再说一遍,这是一个黑客!不要相信它不会破裂。