2

我正在尝试在 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() 上传。

我不知道这是否是程序中的错误,或者太晦涩而无法期待一个简单的答案,但如果有人可以提供帮助,我将不胜感激。我认为我没有遗漏任何明显的东西。

谢谢。

4

5 回答 5

5

一些东西...

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

uploader.init();

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

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

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

第三个是从 plupload 中删除文件的工作示例

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

干杯!

于 2013-08-29T10:33:50.310 回答
2

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

var queueLength = uploader.files.length;

for (i = 0; i < queueLength; i++) {

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

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

}

}

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

于 2014-06-04T17:16:13.073 回答
1

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

uploader.removeFile(files[i].id)

于 2012-02-17T21:23:23.357 回答
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]);
  }

});
于 2012-07-27T08:48:34.167 回答
0
uploader.bind('FilesAdded', function(up, files) {
    if( files.length > 1 )
    {
        $.each(files, function(i, file) {
            up.removeFile(file);    
        });
    }
});
于 2013-02-05T22:43:12.820 回答