2012-10-22 12 views
12

Sto utilizzando il plugin di caricamento file jQuery.jQuery Caricamento file - come riconoscere quando tutti i file sono stati caricati

Mi piacerebbe essere in grado di attivare un evento quando tutti i file selezionati hanno terminato il caricamento. Finora ho un evento per fare un'azione quando viene selezionato un file per il caricamento e quando ogni particolare file termina il caricamento - c'è un modo per rilevare che tutti i file selezionati hanno terminato il caricamento?

L'applicazione reale è qui http://repinzle-demo.herokuapp.com/upload

Il mio campo di input è simile al seguente:

<div id="fine-uploader-basic" class="btn btn-success" style="position: relative; overflow: hidden; direction: ltr;"> 

mio codice di script simile al seguente:

<script> 
     $(function() { 
      $('#fileupload').fileupload({ 
       dataType: 'json', 
       add: function (e, data) { // when files are selected this lists the files to be uploaded 
        $.each(data.files, function (index, file) { 
         $('<p/>').text("Uploading ... "+file.name).appendTo("#fileList"); 
        }); 
        data.submit(); 
       }, 
       done: function (e, data) { // when a file gets uploaded this lists the name 
        $.each(data.files, function (index, file) { 
         $('<p/>').text("Upload complete ..."+file.name).appendTo("#fileList"); 
        }); 
       } 
      }); 
     }); 
    </script> 

sto gestisce la richiesta con un gioco Controller (Java) di quadro simile al seguente:

publi

c static void doUpload(File[] files) throws IOException{ 

     List<ImageToUpload> imagesdata = new ArrayList<ImageToUpload>(); 
       //ImageToUpload has information about images that are going to be uploaded, name size etc. 

     for(int i=0;i<files.length;i++){ 
      Upload upload = new Upload(files[i]); 
      upload.doit(); //uploads pictures to Amazon S3 
      Picture pic = new Picture(files[i].getName()); 
      pic.save(); // saves metadata to a MongoDB instance 
      imagesdata.add(new ImageToUpload(files[i].getName())); 
     } 

     renderJSON(imagesdata); 
    } 

risposta

17

Penso che si sta cercando evento 'stop':

$('#fileupload').bind('fileuploadstop', function (e) {/* ... */}) 

come detto nel plugin documentation:

richiamata per il caricamento si ferma, equivalente alla manifestazione mondiale ajaxStop (ma solo per richieste di upload di file).

È inoltre possibile specificare la funzione sulla creazione di plug-in di passarlo come parametro di

$('#fileupload').fileupload({ 
     stop: function (e) {}, // .bind('fileuploadstop', func); 
    }); 
+1

Questa frustrazione esiste ancora 3 anni dopo in origine essere chiesto. Tutte le risposte che ho visto non affrontano completamente il problema. Per il callback "fileuploadstop" attivato solo 1 volta dopo che tutti i caricamenti sono terminati, è necessario passare un'opzione di "singleFileUploads: false". Ciò causerà l'utilizzo di 1 richiesta XHR per tutti i caricamenti e solo la richiamata potrà essere attivata una sola volta. Altre risposte: http://stackoverflow.com/questions/19025748/finish-of-multiple-file-upload http://stackoverflow.com/questions/18636845/refreshing-the-page-after-completing- uploads-in-jquery-multi-file-uplaoder – BlueWater86

+0

Lol. Stavo provando l'intera lista di metodi che potrebbero calciare quando il caricamento asincrono è stato completato. Non pensavo che l'evento di stop sarebbe stata la cosa da usare. Grazie! –

Problemi correlati