2013-05-02 3 views
6

Ich habe nur normale Form mit einigen Eingabefeldern und einem Dateieingabefeld. Ich verwende das Blueimp Jquery File Upload Plugin, um eine Datei hochzuladen. Es scheint zu funktionieren, wenn Sie eine Datei auswählen und danach auf den Upload-Button klicken. Wenn Sie Dateien zum Hochladen erneut auswählen, wird die gesamte Vorgeschichte der Auswahl gespeichert und nach dem Hochladen werden alle XHRs an den Server gesendet.Warum BlueImps JQuery-Datei-Upload alle hinzufügen prev. ausgewählte Dateien, selbst wenn die Optionen [replaceFileInput: false] und [maxNumberOfFiles: 1] auf init gesetzt sind?

Ich möchte nur eine aktuell ausgewählte Datei hochladen, nicht alle zuvor ausgewählten Dateien (in Datei öffnen Dialog).

Hier ist mein js Modul mit dem Hochladen zu handhaben:

$(function() { 
    $('#upload_form').fileupload({ 

     dataType: 'json', 
     autoUpload: false, 
     fileInput: '#filechose_button', 
     replaceFileInput: false, 
     maxNumberOfFiles: 1, 
     multipart: true, 

     add: function (e, data) { 

      $('#upload_button').click(function() { 

       $('#upload_button').attr('disabled', true); 
       ... 
       data.submit(); 
       ... 
      }); 
     }, 

     done: function (e, data) { 
      ... // successfully uploaded 
     }, 

     progressall: function (e, data) { 
      ... // update a progress bar 
     } 
    }); 
}); 

Die Lösungen, die ich hier gefunden (How to upload a file only once with blueimp file upload plugin?) scheint zu sein, nicht der beste Weg (ich sehe es als schmutzig), weil nur den Klick freibleibend Ereignis löst noch nicht das Problem des Sammelns aller zuvor ausgewählten Dateien (Art von Speicherlecks)

Die Option maxNumberOfFiles: 1 funktioniert nicht für mich.

+0

gibt es keine "Speicherlecks". Versuchen Sie, zwei Dateien hinzuzufügen, und löschen Sie eine Datei aus dem Dateisystem, bevor Sie sie hochladen. Die Datei wird nicht hochgeladen - der Browser speichert den Pfad zu den Dateien, nicht die Dateien selbst. –

Antwort

6

Ich hatte das gleiche Problem, meine Lösung bestand darin, das click-Ereignis meiner Schaltfläche zu lösen und jedes Mal, wenn das add-Ereignis aufgerufen wird, zurück zu binden. Versuche dies.

...

add: function (e, data) { 

     $('#upload_button').unbind('click'); 
     data.context = $('#upload_button').bind('click', function() { 
        ... 
        data.submit(); 
     } 
} 
+0

Ja, aber das ist das gleiche wie die Lösung, die ich erwähnt habe. Seltsam, warum die Option maxNumberOfFiles nicht funktioniert. Aber ok, es funktioniert und tatsächlich kann ich die Semantik der maxNumberOfFiles-Option selbst implementieren: if (Anzahl der Bindungen mit hinzugefügten Dateien mehr als maxNumberOfFiles) lösen die erste Bindung (Art einer FIFO-Warteschlange mit Grenzen). Wie auch immer, gut, dass die Lösung für viele Leute instinktiv ist :) – static

+0

Wenn du es zum Plugin entbindest, kannst du es nicht mehr benutzen? –

+0

Allan, das Plugin ist nicht an diese Schaltfläche gebunden, es ist beliebig in der Add-Funktion angegeben. – nickbw

Verwandte Themen