Подтвердить что ты не робот

Valums Ajax Uploader (Mutli) - обнаружение при загрузке всех файлов

Я использую Valums Ajax Uploader для загрузки партии файлов. Недавно мы изменили код из одного загружаемого файла с несколькими загрузками. Это вызвало проблему с нашим кодом.

Как вы можете видеть, при пожаре событий onComplete мы перезагружаем страницу, чтобы отображать недавно загруженные изображения. Тем не менее, событие onComplete, похоже, срабатывает после завершения файла EACH, а не после всей партии. Это теперь вызывает проблему, потому что когда первый файл заканчивается, попытка перезагрузки страницы запускается, и загрузчик выдает предупреждение "Если вы покинете эту страницу, все черты будут разрываться на оставшихся загрузках" - или что-то в этом роде.

Я замечаю, что событие onComplete отправляет обратно 0-основанный идентификатор завершенного файла, но я точно не знаю, как его использовать, чтобы определить, когда пакет сделан.

Я думаю, мой вопрос: A) Есть ли другое событие, которое запускается, когда все файлы завершены или B) Как определить, сколько файлов выбрано пользователем, чтобы отслеживать в событии onComplete, сколько файлы завершены?

    var uploader = new qq.FileUploader({
        multiple: true,
        element: document.getElementById('file-uploader'),
        action: '/projectPhotoUpload.php',
        allowedExtensions: ['jpg', 'png', 'gif'],
        debug: true,
        params: {id: i},
        onComplete: function(id, fileName, responseJSON){
            window.location = 'projects.php?all=true&tab=1&sel=' + currProject;                                 
        }   
    })  
4b9b3361

Ответ 1

Вы можете добавить счетчик, который увеличивается при запуске загрузки и уменьшается после завершения. Только переадресация завершена, когда счетчик равен 0.

var running = 0;  
var uploader = new qq.FileUploader({
    multiple: true,
    element: document.getElementById('file-uploader'),
    action: '/projectPhotoUpload.php',
    allowedExtensions: ['jpg', 'png', 'gif'],
    debug: true,
    params: {id: i},
    onSubmit: function(id, fileName){
        running++;                                 
    },
    onComplete: function(id, fileName, responseJSON){
        running--;
        if(running==0){
          window.location = 'projects.php?all=true&tab=1&sel=' + currProject;                                 
        }
    }   
}) 

Ответ 2

Хороший ответ, из интереса, если вы хотите проверить responseJSON, чтобы узнать, загружены ли файлы, его набор на сервере script

return array('success'=>true, 'filename'=>$filename . '.' . $ext);

Затем вы можете забрать его в JS, например

var success = responseJSON["success"]
var filename = responseJSON["filename"]

Таким образом, вы можете составить список файлов и проверить имена при завершении или только уменьшить

if (success == true)

Если загрузка была неудачной, вы можете не захотеть ее уменьшить, например

Ответ 3

Вам нужно добавить событие отмены, если пользователь отменит загрузку файла:

onCancel: function(id, fileName){running--;}

Я обсуждаю правильный подход к моей реализации. Я также хотел бы, чтобы страница была перенаправлена ​​после загрузки файлов, но что, если пользователь намеревается загрузить больше файлов; файлы могут быть распространены в отдельных каталогах.

Похоже, лучший подход - это иметь кнопку "Я сделал", которая будет перенаправлена ​​после завершения загрузки пользователя.

Ответ 4

Простейшим способом было бы использовать внутреннее свойство _filesInProgress, чтобы проверить, были ли обработаны все загруженные файлы. Это дало бы:

var uploader = new qq.FileUploader({
    multiple: true,
    element: document.getElementById('file-uploader'),
    action: '/projectPhotoUpload.php',
    allowedExtensions: ['jpg', 'png', 'gif'],
    debug: true,
    params: {id: i},
    onComplete: function(id, fileName, responseJSON){
        if(uploader._filesInProgress == 0){
            window.location = 'projects.php?all=true&tab=1&sel=' + currProject;
        }                                 
    }   
});