2016-04-11 3 views
2

У меня есть очередь, когда пользователь выбирает файлы, файлы будут добавлены в очередь, эти файлы могут или не могут быть выбраны сразуКак обрабатывать загрузку нескольких файлов в JQuery Загрузка файлов правильно

Проблема заключается в том, что при начальной загрузке каждый файл открывает отдельное соединение XHR и отдельный запрос. Это не нормально по двум основным причинам. Если пользователь выбирает 100 файлов, будет сто одновременных подключений !! и 2, если неудача соединения, полная загрузка не удалась, я пробовал разные вещи, но ни один из них не работает. Есть ли какое-либо обходное решение для этого? возможно, ограничение одновременной загрузки? Я не думаю, что это вариант, так как он работает только в нескольких частях загрузить

Вот некоторую информацию о том, что я делаю

  1. Я не использую из нескольких частей (с использованием блочной загрузки).

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

А вот код, я использую:

// Upload queue array 
var filesList = new Array(); 

$('#fileupload').fileupload({ 
    url: 'http://example.com/listener', 
    maxChunkSize: 200000000, 
    multipart: false, 
    autoUpload: false, 
    limitConcurrentUploads: 3, 

    add: function(e, data) { 
    // Just for rendering html table 
    $.each(data.files, function(index, file) { 
     $('#files table>tbody').append('<tr><td>' + file.name + '</td><td>' + humanFileSize(file.size) + '</td></tr>'); 
    }); 

    // Add to fileList array 
    filesList.push(data); 
    } 
}).prop('disabled', !$.support.fileInput).parent().addClass($.support.fileInput ? undefined : 'disabled'); 

// Start upload button 
$(document).on('click', '#startup', function() { 
    filesList.forEach(function(data) { 
    data.submit(); 
    }); 
}); 

// Clear queue button 
$(document).on('click', '#clearqueue', function() { 
    $('#files table>tbody').html(''); 

    // Clear queue 
    filesList.length = 0; 

    // Replace file input element 
    $("#fileupload").replaceWith($("#fileupload").val('').clone(true)); 
}); 

ответ

0

Существует вариант, который по умолчанию ложным sequentialUploads. Попробуйте установить его на true.

sequentialUploads (по умолчанию: ложь)

Установите эту опцию верно оформить все запросы закачивать файл в последовательном порядке вместо одновременных запросов.

Вы можете обновить визуальные очереди (если есть один), используя обратные вызовы, как:

fileuploadprocessdone

Callback для успешного завершения индивидуальной очереди обработки файлов.

$('#fileupload').bind('fileuploadprocessdone', function (e, data) {});

+0

спасибо, но я не хочу последовательную загрузку, я хочу загрузку одновременных соединений, но ограничение активных соединений (например, limitConcurrentUploads). И вы считаете, что «Параметры обработки файлов» - лучшее решение для моего обработчика очереди? (вместо массива «fileList», который используется сейчас) – Mojbala

+0

Я не понимаю, потому что для этого нужно работать 'limitConcurrentUploads'. это не работает для u? – p1100i

+0

no not working :-(, я не знаю почему, но я думаю, проблема заключается в отправке файлов foreach для отправки MY queue, и если бы я нашел решение для очереди на обработку вместо массива fileList, может быть '' 'limitConcurrentUploads '' 'отлично работать ... – Mojbala

Смежные вопросы