Angularjs Datei-Upload in Put-Methode funktioniert nicht

9

Ich habe eine einfache todos-Anwendung, in der ich versuche, ein Foto zusammen mit einem einzelnen Todo hochzuladen. Jetzt habe ich diese Factory-Funktion erstellt, die sich um die Erstellung der Todo kümmert.

%Vor%

Und die Factory-Update-Methode sieht so aus

%Vor%

Das insertTodo funktioniert wie erwartet, aber das updateTodo gibt keine Daten auf dem Server aus. Ich benutze Laravel für die API und der Update-API-Endpunkt hat diesen Code

%Vor%

Dies zeigt, dass die Notiz in der Anfrage gepostet wurde. Und wenn ich den Post in der updateTodo Factory-Methode ändern, beginnt es zu arbeiten. Fehle ich einige zusätzliche Header oder etwas?

Aktualisieren

Wenn ich die transformRequest und headers Form der updateTodo Methode entferne, werden die Textdaten erfolgreich auf dem Server empfangen, aber die Datei nicht.
Und wenn ich nur die headers nothing entferne wird gepostet

Aktualisieren

Ich benutze den PHP-Server, der mit Laravel kommt, mit diesem Befehl

%Vor%

Aktualisieren

Dank @ Ricardos Antwort konnte ich die übermittelten Daten unter Verwendung dieses Codes erhalten

%Vor%

Ich erhalte den Stream in diesem Format

%Vor%

Jetzt muss ich dieses Rohformat analysieren. Ich habe zwei PHP-Methoden gefunden, die andere Leute vorgeschlagen haben Ссылка und Ссылка , aber beide funktionieren nicht richtig und geben kein Array wie $ _GET oder $ _POST.

    
Sajjad Ashraf 02.10.2015, 07:15
quelle

3 Antworten

1

Dieser Teil der PHP-Dokumentation behandelt die PUT-Methode und Datei-Uploads (mehrteilige / Formulardaten).

Ich kann keine Teile daraus zitieren, weil ich denke, dass alles wichtig ist. Sie sollten es im Detail lesen, aber um es zusammenzufassen ist es nicht möglich ohne Änderungen an Ihrer Apache-Konfiguration und der Erstellung von Hilfsskripten.

Bei Laravel sollten Sie Form Method Spoofing verwenden (im Grunde eine Variable namens _method ) und weiterhin POST verwenden. Mit dem _method können Sie Laravels PUT-Aktion korrekt aufrufen.

Bearbeiten

AngularJS sendet standardmäßig Daten im JSON-Format, weshalb Sie nicht auf die Daten mit dem $_POST global zugreifen können. Ich habe dies in einer weiteren Frage beantwortet, in der erklärt wird, was Sie tun müssen.

    
Ricardo Velhote 12.10.2015 14:52
quelle
0

Ich denke, Sie müssen die Datei serverseitig serialisieren, und wenn Sie eine Datei senden, fügen Sie einen benutzerdefinierten Header hinzu und behandeln diese Headeranforderungen auf der Serverseite entsprechend.

    
Aakash Kharche 09.10.2015 14:12
quelle
0

Erstelle dir formData upfront - & gt; Sie brauchen den Transformator dafür nicht.
Füge transformRequest : angular.identity zu deinen HTTP Kopfzeilen hinzu. Ihr Code sollte ähnlich wie das folgende Snippet aussehen:

%Vor%

Winkelidentität führt nicht mehr aus, als Ihre Formulardaten zurückzuspucken: Ссылка

    
Adrian Oprea 12.10.2015 14:35
quelle