plupload removeFiles

时间:2012-01-12 20:53:59

标签: javascript upload plupload

我正在尝试删除FilesAdded事件中包含不允许扩展名的文件。 (我不能使用filter参数,因为我需要一个独占列表。)

我的代码有点像这样:

uploader.bind('FilesAdded', function(up, files) {
    var count = files.length;
    var i = 0;
    for (i;i<count;i++) {
        var validExt = validate(files[i].name);
        if(!validExt){

如果扩展名无效,我需要删除添加的文件。我尝试了以下内容:

uploader.splice(i,1)
uploader.removeFile(files[i]);
uploader.refresh();

触发了FilesRemoved事件,但删除的文件仍然使用uploader.start()上传。

我不知道这是否是程序中的错误,或者太过模糊,不能期待一个简单的答案,但如果有人可以提供帮助,我会非常感激。我不认为我错过了任何明显的事情。

感谢。

5 个答案:

答案 0 :(得分:5)

一些事情......

首先,您必须在调用init()函数后绑定filesAdded事件。

uploader.init();

uploader.bind('FilesAdded', function (up, files) {...}

第二,您可以在定义plupload时使用prop过滤器过滤文件扩展名

uploader = new plupload.Uploader({
        ...,
        filters: [
            { title: "Image files", extensions: "jpeg,jpg,gif,png" }
        ],
        ...
    });

此处第3个是从plupload中删除文件的工作示例

$.each(uploader.files, function (i, file) {
    if (file && file.id != currentFile.id) {
        uploader.removeFile(file);
    }
});

干杯!

答案 1 :(得分:2)

如果没有上传进度,并且您想从上传者列表中删除所有排队的文件:

  

var queueLength = uploader.files.length;

     

for(i = 0; i&lt; queueLength; i ++){

     
    

if(uploader.files [0]&amp;&amp; uploader.files [0]!== undefined){

         
      

uploader.removeFile(uploader.files [0]);

    
         

}

  
     

}

注意:如果您尝试按索引删除文件,则某些文件会保留在列表中;因为每次从列表中删除文件项时,都会刷新它并使用索引。

答案 2 :(得分:1)

您需要将要删除的文件的ID传递给removeFile:

  

uploader.removeFile(files[i].id)

答案 3 :(得分:1)

您可以使用回调“QueueChanged”,它也适用于我。

uploader.bind('QueueChanged', function(up){

  var file_count = up.files.length;
  for(i = 0; i < file_count; i++) {
    if(i != (file_count - 1)) up.removeFile(up.files[i]);
  }

});

答案 4 :(得分:0)

uploader.bind('FilesAdded', function(up, files) {
    if( files.length > 1 )
    {
        $.each(files, function(i, file) {
            up.removeFile(file);    
        });
    }
});