2013-10-09 3 views
3

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

Моя реализация следует. Просто хочу знать, правильно ли это.

function init() { 
    var uploader = new qq.FineUploader({ 
     element: document.getElementById('button-selectfiles'), 
     request: { 
      endpoint: '/Up/UploadFile' 
     }, 

     callbacks: { 
      onStatusChange: onFileUploadStatusChange 
     } 
    }); 
}; 

var uploads = 0; 
function onFileUploadStatusChange(id, oldStatus, newStatus) { 
    console.log(newStatus); 

    if (newStatus === 'submitting') { 
     uploads++; 
    } 

    if (newStatus === 'upload successful' || newStatus === 'upload failed') { 
     uploads--; 
    } 

    if (uploads === 0) { 

     console.log('done'); 
    } 
} 

ответ

7

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

callbacks: { 
    onAllComplete: function() { 
     alert('done') 
    } 
} 
5

Ваша onFileUploadStatusChange функция не может проверить отмененные файлы.

Способ проверки загрузки всех файлов осуществляется с помощью методов API: getInProgress и getUploads. Если у нас 0 загрузок и 0 неудачных выгрузок, мы можем с уверенностью предположить, что все файлы были загружены. Возможно, вам захочется удалить проверку на неудачные загрузки, если вы все равно хотите продолжить, если какая-либо загрузка не удалась. Мы проверяем выполнение этих условий во время обратных вызовов onStatusChange и onComplete. Событие onStatusChange должно только проверять, был ли файл отменен, поскольку это может означать, что все файлы других завершены, и, таким образом, пользовательское действие может быть завершено.

Примечание: Я адаптировал свой ответ 16989719 для работы с отличным загрузчиком, отличным от jQuery.

function init() { 
    var uploader; 

    function check_done() { 
    // Alert the user when all uploads are completed. 
    // You probably want to execute a different action though. 
     if (allUploadsCompleted() === true) { 
      window.alert('All files uploaded'); 
     } 
    } 

    function allUploadsCompleted() { 
     // If and only if all of Fine Uploader's uploads are in a state of 
     // completion will this function fire the provided callback. 

     // If there are 0 uploads in progress... 
     if (uploader.getInProgress() === 0) { 
      var failedUploads = uploader.getUploads({ status: qq.status.UPLOAD_FAILED }); 
      // ... and none have failed 
      if (failedUploads.length === 0) { 
       // They all have completed. 
       return true; 
      } 
     }   
     return false; 
    } 

    uploader = new qq.FineUploader({ 
     element: document.getElementById('button-selectfiles'), 
     request: { 
      endpoint: '/Up/UploadFile' 
     }, 
     callbacks: { 
      onStatusChange: function (id, oldStatus, newStatus) { 
       // This will check to see if a file that has been cancelled 
       // would equate to all uploads being 'completed'. 
       if (newStatus === qq.status.CANCELLED) { 
        check_done(); 
       }  
      }, 
      onComplete: check_done 
     } 
    }); 
}; 
+0

Его весьма словесные, я бы ожидать, что это из коробки, но благодаря очень , Это лучше и надежнее:) – vmachacek

+0

API развился с тех пор, и ответ @ denala является правильным решением. –

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