2012-10-22 3 views
12

Ich benutze das jQuery File Upload Plugin.jQuery Datei-Upload - wie zu erkennen, wenn alle Dateien hochgeladen haben

Ich möchte in der Lage sein, ein Ereignis auszulösen, wenn alle ausgewählten Dateien hochgeladen wurden. Bisher habe ich ein Ereignis, um eine Aktion auszuführen, wenn eine Datei zum Hochladen ausgewählt wurde und wenn jede bestimmte Datei hochgeladen wurde. Gibt es eine Möglichkeit festzustellen, dass alle ausgewählten Dateien hochgeladen wurden?

Die eigentliche App ist hier http://repinzle-demo.herokuapp.com/upload

Mein Eingabefeld sieht wie folgt aus:

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

Mein Script-Code wie folgt aussieht:

<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> 

ich mit einem Spiel die Anfrage am Umgang Framework (Java) -Controller, der wie folgt aussieht:

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); 
    } 

Antwort

17

Ich glaube, Sie suchen nach 'Stop' Event:

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

wie gesagt in der plugin documentation:

Rückruf für Uploads zu stoppen, das entspricht dem globalen ajaxStop Ereignis (aber nur für Datei-Upload-Anfragen).

Sie können die Funktion auch auf Plugin-Erstellung geben Sie es als Parameter übergeben

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

Diese Frustration noch vorhanden ist 3 Jahre nach der ursprünglich gefragt. Alle Antworten, die ich gesehen habe, sprechen das Problem nicht vollständig an. Damit der Rückruf 'fileuploadstop' nur einmal nach dem Ende aller Uploads ausgelöst wird, müssen Sie die Option 'singleFileUploads: false' übergeben. Dies führt dazu, dass 1 XHR-Anforderung für alle Uploads verwendet wird und nur der Callback nur einmal ausgelöst wird. Andere Antworten: http://stackoverflow.com/questions/19025748/finish-of-multiple-file-upload http://stackoverflow.com/questions/18636845/refreshing-the-page-after-completing- uploads-in-jquery-multi-Datei-Uplaoder – BlueWater86

+0

Lol. Ich habe die ganze Liste von Methoden ausprobiert, die nach dem asynchronen Upload fehlschlagen könnten. Ich dachte nicht, dass das Stop-Ereignis das Richtige wäre. Vielen Dank! –

Verwandte Themen