0

所以我使用 PLUpload 来上传文件。但是,我遇到了一个问题。我试图在队列完成时触发一个事件。我很近,但不完全在那里。看这里:

$(function() {
    var files_remaining = 0;

    // Setup flash version
    $("#flash_uploader").pluploadQueue({
        // General settings
        runtimes : 'flash',
        url : 'blah.php',
        max_file_size : '200mb',
        chunk_size : '1mb',

        // Flash settings
        flash_swf_url : 'plupload.flash.swf'
    });

    var uploader = $("#flash_uploader").pluploadQueue();

    uploader.bind('FilesAdded', function(up, file, res)
    {
        files_remaining++;
    });

    uploader.bind('FileUploaded', function(up, file, res)
    {
        files_remaining--;
        if (files_remaining == 0)
        {
            alert('Complete!');
        }
    });
});

注意最后两个.bind()用途。基本上,我正在尝试更新一个变量来确定已经上传了多少文件,然后确定(基于此)队列何时完成。但是,您可能知道,FilesAdded 不是基于每个文件运行,而是在将任意数量的文件添加到队列时运行。如果添加三个文件,则仅调用一次 FilesAdded。这意味着此尝试仅在一次上传一个文件时才有效。

所以,我的问题是:获取队列中剩余文件数量的最佳方法是什么,或者最终(甚至更好)每次队列完成时调用一个事件?我知道很多人都有这个问题,但我还没有找到一个我能够找到工作的解决方案!

谢谢!

4

2 回答 2

1
$(function() {
    var files_remaining = 0;

    // Setup flash version
    $("#flash_uploader").pluploadQueue({
        // General settings
        runtimes : 'flash',
        url : 'blah.php',
        max_file_size : '200mb',
        chunk_size : '1mb',

        // Flash settings
        flash_swf_url : 'plupload.flash.swf'
    });

    var uploader = $("#flash_uploader").pluploadQueue();

    uploader.bind('QueueChanged', function(up, files)
    {
        files_remaining = uploader.files.length;
    });

    uploader.bind('FileUploaded', function(up, file, res)
    {
        files_remaining--;
        if (files_remaining == 0)
        {
            alert('Complete!');
        }
    });
});
于 2012-07-03T17:31:13.310 回答
1

在 FileUploaded 事件中检查up.total.queued

uploader.bind('FileUploaded', function(up, file, res)
{
     if (up.total.queued == 0)
     {
         alert('Complete!');
     }
});
于 2015-05-09T14:58:23.897 回答