2012-10-22 12 views
12

Używam wtyczki do przesyłania plików jQuery.Przesyłanie plików jQuery - jak rozpoznać, kiedy wszystkie pliki zostały przesłane

Chciałbym móc wywołać zdarzenie, gdy wszystkie wybrane pliki zostały zakończone. Do tej pory mam zdarzenie do wykonania akcji po wybraniu pliku (plików) do przesłania i po zakończeniu każdego pliku - czy istnieje sposób na wykrycie, że wszystkie wybrane pliki zostały przesłane?

Rzeczywista aplikacja jest tutaj http://repinzle-demo.herokuapp.com/upload

Moje pole wejściowe wygląda następująco:

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

Mój kod skryptu wygląda następująco:

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

Ja obsługi żądania z luzem Kontroler struktury (Java), który wygląda następująco:

par

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

Odpowiedz

17

myślę szukasz imprezy 'Stop':

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

jak powiedział w plugin documentation:

oddzwaniania do przesyłania zatrzymać, co odpowiada światowym wydarzeniu ajaxStop (ale tylko w przypadku żądań przesyłania plików).

Można również określić funkcję na tworzenie wtyczek przekazaniem go jako parametr

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

Ta frustracja nadal istnieje 3 lata po pierwotnie pytania. Wszystkie odpowiedzi, które widziałem, nie rozwiązują w pełni problemu. Aby wywołanie zwrotne "fileuploadstop" uruchomiło się 1 raz po zakończeniu wszystkich operacji przesyłania, należy przekazać opcję "singleFileUploads: false". Spowoduje to użycie 1 żądania XHR we wszystkich przesyłanych plikach i tylko wywołanie zwrotne będzie uruchamiane tylko jeden raz. Inne odpowiedzi: 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. Próbowałem całej listy metod, które mogą wykopać po zakończeniu przesyłania asynchronicznego. Nie sądziłem, że zdarzy się, że zdarzenie zatrzymania powinno być użyteczne. Dzięki! –

Powiązane problemy