2014-08-27 2 views
6

Ich verwende https://github.com/nervgh/angular-file-upload für Datei-Uploads.AngularJS Datei-Upload sendet veraltete formData

Ich habe ein Formular, das, zusätzlich zum Hochladen einer Datei, einige andere Felder sendet. Aus Gründen der Klarheit, ich sende nur ein Feld in diesem Beispiel:

$scope.save_with_upload = function(user) { 
    $scope.uploader.formData = [{ 
     name: user.name, 
    }]; 

    $scope.uploader.uploadAll(); 
} 

Lassen Sie uns sagen, dass der Wert des name Eingang Test 1.

  1. Als ich die Seite laden, und klicken Sie Speichern, sendet die Datei aber formData überhaupt nicht senden.
  2. Dann ändere ich name Feld zu Test 2 und hit Speichern. Es sendet die Datei und formData, aber der Wert von name sendet es Test 1.
  3. Dann ändere ich name Feld zu Test 3 und hit Speichern. Es sendet die Datei und formData, aber der Wert von name sendet es Test 2.
  4. ... und so weiter ...

So scheint es immer um die Daten zu senden, die zu formDatavor den letzten Anruf uploadAll zugewiesen wurden.

Zur Verdeutlichung: Wenn ich dir(user, $scope.uploader.formData) kurz vor dem Aufruf mache, zeigt es korrekte aktuelle Werte in beiden.

Ich habe seit ein paar Stunden damit zu kämpfen und kann einfach nicht sehen, was los ist. Irgendwelche Ideen?

Antwort

12

Anbringen Formularfelder an die FileItem Objekt - und nicht auf FileUpload - wird es:

uploader.onBeforeUploadItem = function(item) { 
    formData = [{ 
     name: user.name, 
    }]; 
    Array.prototype.push.apply(item.formData, formData); 
}; 

Der Grund dafür ist, tatsächlich die Einstellungen auf FileItem verwendet werden. Wenn eine Datei zur Warteschlange hinzugefügt wird, werden die Einstellungen von FileUpload in FileItem kopiert. Änderungen an den Optionen FileUpload, die nach dem Hinzufügen einer Datei zur Warteschlange vorgenommen werden, haben keine Auswirkungen.

+0

wohin geht dieser Rückruf? Ich habe es im Controller versucht und es lief nicht. Kannst du es einfach in die Sicht werfen? – bischoffingston

+1

Warum können Sie auch 'item.formData.push (formData)' nicht tun? – bischoffingston

+1

@bischoffingston Dieser Code muss in den Controller gehen. 'uploader' muss eine Instanz von' FileUpload' sein. 'item.formData.push (formData)' und 'Array.prototype.push.apply (item.formData, formData)' sind äquivalent. –