FineUploader загружает один и тот же файл несколько раз в одно и то же время

Предположим, что я хочу загрузить сразу несколько файлов, что я могу сделать, когда для параметра множественного значения можно использовать true:

var myUploader = new qq.FineUploader({
 element: $('#test')[0],
 multiple: true,
 request: { endpoint: 'path/to/master/server/php/' },
 autoUpload: false,
});

Теперь, скажем, у меня есть кнопка, которая позволит мне выбрать файлы, которые я хочу загрузить. Если я нажму на эту кнопку и выберем, скажем, файл test.txt, файл test.txt будет добавлен в список файлов, которые будут загружены. Все идет нормально. Теперь моя проблема в том, что если я снова нажму кнопку и снова выберу файл test.txt, он будет добавлен в список, хотя он уже находится в списке.

Есть ли способ предотвратить использование FineUploader для этого?

Заранее спасибо

1 ответ

Я был бы осторожен, объявив файл дубликатом просто на основе имени. По крайней мере, вы должны учитывать размер. Хотя это невозможно в IE9 и старше, поскольку мы не можем определить размер файла на стороне клиента в этих браузерах. Просто для простоты позвольте использовать имя файла исключительно...

Один из способов - поддерживать массив имен файлов, переданных загрузчику. Вы можете добавить этот список в свой обработчик onSubmitted. Вы можете вносить обработчик onValidate, который отклонит файл, если он уже существует в массиве. Ваш код будет выглядеть примерно так:

var filenames = [];
var myUploader = new qq.FineUploader({
 element: $('#test')[0],
 multiple: true,
 request: { endpoint: 'path/to/master/server/php/' },
 autoUpload: false,
 callbacks: {
 onSubmitted: function(id, name) {
 filenames.push(name);
 },
 onValidate: function(fileData) {
 return qq.indexOf(filenames, fileData.name) < 0;
 }
 }
});

Кроме того, просто для ударов, почему бы просто не использовать плагин Fine Uploader jQuery, поскольку, похоже, вы уже используете jQuery в своем проекте? Вышеприведенный пример перезаписывается с помощью подключаемого модуля jQuery ниже:

var filenames = [];
$('#test').fineUploader({
 multiple: true,
 request: { endpoint: 'path/to/master/server/php/' },
 autoUpload: false
})
 .on("submitted", function(event, id, name) {
 filenames.push(name); 
 })
 .on("validate", function(event, fileData) {
 return $.inArray(fileData.name, filenames) < 0;
 });

licensed under cc by-sa 3.0 with attribution.