2012-01-12 2 views
2

Я пытаюсь удалить файлы с недопустимыми расширениями на событие FilesAdded. (Я не могу использовать параметр фильтра, поскольку мне нужен эксклюзивный список).plupload removeFiles

У меня есть некоторый код, немного как это:

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

Несколько вещей ...

первых вы должны связать событие 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); 
    } 
}); 

Ура!

+0

* Привет. Благодарю. Думаю, я, вероятно, нашел исправление. Чтобы очистить, я думаю, что вы передаете объект файла, а не идентификатор. Работает для меня, по крайней мере, в текущем выпуске plupload. Я не уверен, что ваш лучший ответ - я не думаю, что использовал jQuery, но для меня это достаточно хорошо. – stackuser10210

1

Вы должны передать идентификатор файла, который вы хотите удалить в removeFile:

uploader.removeFile(files[i].id)

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]); 
    } 

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

Рассмотрите возможность добавления комментариев к вашему решению и форматирование кода, это сделает его более понятным для OP и будущих посетителей. – Yaroslav

2

Когда нет никакого прогресса загрузки, и вы хотите, чтобы удалить все файлы в очереди из списка загрузчика:

вар queueLength = uploader.files.length;

для (I = 0, я < queueLength; я ++) {

, если (uploader.files [0] & & uploader.files [0] == неопределенными!) {

uploader.removeFile (uploader.Файлы [0]);

}

}

Примечание: При попытке удалить файлы по индексу, некоторые файлы остаются в списке; потому что каждый раз, когда элемент файла удаляется из списка, он обновляется и применяются индексы.

+0

Это был единственный метод, который работал для меня, к сожалению, я провел много времени с этим и пришел к тому же выводу, прежде чем увидел этот ответ. – David