【问题标题】:What's the best way to cancel an upload in progress using filepicker.io?使用 filepicker.io 取消正在进行的上传的最佳方法是什么?
【发布时间】:2012-10-17 07:08:41
【问题描述】:

我正在使用filepicker.makeDropPane 进行一些简单的上传。我在 filepicker.io 的 web documentation 的文档中找不到的一件事是取消正在进行的上传的方法。

直觉上我觉得onStart函数应该多传一个参数。一个表示上传的对象,该对象具有 cancel() 函数,调用该函数时会立即取消文件上传。这样的东西似乎不可用。

【问题讨论】:

    标签: filepicker.io


    【解决方案1】:

    我们实际上还没有这个功能,但它是有意义的。我会看看在这些方面添加一些东西,然后让你知道

    【讨论】:

    • 谢谢。我发布的只是一个想法,不一定是理想的方式。很高兴看到你们实现了什么。
    • 我同意。我们从可以取消的内联 div 对话框中调用 filepicker。必须防止在对话框关闭时稍后返回异步响应。
    【解决方案2】:

    这是我想出的一个丑陋的黑客攻击,以防止不需要的返回文件以及其他一些关于进度和多个文件等的花哨的东西。你肯定想使用静态 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!不要相信它不会坏。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-18
      • 2010-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-27
      相关资源
      最近更新 更多