Ich möchte einen einfachen mehrteiligen Formularbeitrag von AngularJS auf einen node.js-Server erstellen. Das Formular sollte ein JSON-Objekt in einem Teil und ein Bild im anderen Teil enthalten (ich veröffentliche derzeit nur das JSON-Objekt mit $ resource).
Ich dachte, ich sollte mit der Eingabe type = "file" beginnen, fand dann aber heraus, dass AngularJS sich nicht daran binden kann.
Alle Beispiele, die ich finden kann, sind zum Umschließen von jQuery-Plugins für Drag & Drop. Ich möchte einen einfachen Upload einer Datei.
Ich bin neu bei AngularJS und fühle mich überhaupt nicht wohl, wenn ich meine eigenen Anweisungen schreibe.
angularjs
angularjs-fileupload
Gal Ben-Haim
quelle
quelle
Antworten:
Eine echte funktionierende Lösung ohne andere Abhängigkeiten als anglejs (getestet mit v.1.0.6)
html
Angularjs (1.0.6) unterstützt ng-model für "Eingabedatei" -Tags nicht, daher müssen Sie dies auf "native Weise" tun, wobei alle (eventuell) ausgewählten Dateien vom Benutzer übergeben werden.
Regler
Der coole Teil ist der undefinierte Inhaltstyp und die transformRequest: angle.identity , die am $ http die Möglichkeit geben, den richtigen "Inhaltstyp" auszuwählen und die Grenze zu verwalten, die beim Umgang mit mehrteiligen Daten erforderlich ist.
quelle
fd.append("file", files[0]); fd.append("file",files[1]); fd.append("name", "MyName")
Sie können die einfache / leichte Direktive zum Hochladen von ng-Dateien verwenden . Es unterstützt Drag & Drop, Dateifortschritt und Datei-Upload für Nicht-HTML5-Browser mit FileAPI Flash Shim
JS:
quelle
Es ist effizienter, eine Datei direkt zu senden.
Die Base64-Codierung von
Content-Type: multipart/form-data
erhöht den Overhead um 33%. Wenn der Server dies unterstützt, ist es effizienter, die Dateien direkt zu senden:Beim Senden eines POST mit einem Dateiobjekt ist es wichtig, dies festzulegen
'Content-Type': undefined
. Die XHR-Sendemethode erkennt dann das Dateiobjekt und legt den Inhaltstyp automatisch fest.Informationen zum Senden mehrerer Dateien finden Sie unter Ausführen mehrerer
$http.post
Anforderungen direkt aus einer DateilisteDas
<input type=file>
Element funktioniert standardmäßig nicht mit der ng-model-Direktive . Es braucht eine benutzerdefinierte Anweisung :Arbeitsdemo der Direktive "select-ng-files", die mit 1 funktioniert
ng-model
$http.post
mit Inhaltstypmultipart/form-data
Wenn man senden muss
multipart/form-data
:Beim Senden eines POST mit der FormData-API ist es wichtig, diese festzulegen
'Content-Type': undefined
. Die XHR-Sendemethode erkennt dann dasFormData
Objekt und setzt den Inhaltstyp-Header automatisch auf Multipart- / Formulardaten mit der richtigen Grenze .quelle
filesInput
Direktive scheint nicht mit Angular 1.6.7 zu funktionieren. Ich kann die Dateien im sehen,ng-repeat
aber das gleiche$scope.variable
ist im Controller leer. Auch eines Ihrer Beispiele verwendetfile-model
und einesfiles-input
select-ng-files
. Getestet mit AngularJS 1.7.2.Ich hatte gerade dieses Problem. Es gibt also einige Ansätze. Das erste ist, dass neue Browser das unterstützen
Folgen Sie diesem Link zu einem Blog mit Informationen darüber, wie die Unterstützung auf moderne Browser beschränkt ist. Andernfalls wird dieses Problem vollständig gelöst.
Andernfalls können Sie das Formular mithilfe des Zielattributs an einen Iframe senden. Stellen Sie beim Posten des Formulars sicher, dass das Ziel auf einen Iframe festgelegt ist, dessen Anzeigeeigenschaft auf none festgelegt ist. Das Ziel ist der Name des Iframes. (Nur damit du es weißt.)
ich hoffe das hilft
quelle
Ich weiß, dass dies ein verspäteter Eintrag ist, aber ich habe eine einfache Upload-Direktive erstellt. Was Sie in kürzester Zeit zum Arbeiten bringen können!
ng-simple-upload mehr auf Github mit einem Beispiel mit Web-API.
quelle
Sie können über hochladen,
$resource
indem Sie Daten dem Parameterattribut der Ressourceactions
wie folgt zuweisen :quelle
Ich habe gerade eine einfache Direktive (natürlich aus einer bestehenden) für einen einfachen Uploader in AngularJs geschrieben.
(Das genaue Plugin für den jQuery-Uploader lautet https://github.com/blueimp/jQuery-File-Upload )
Ein einfacher Uploader mit AngularJs (mit CORS-Implementierung)
(Obwohl die Serverseite für PHP ist, können Sie den Knoten auch einfach ändern.)
quelle