Senden Sie ein Base64-codiertes Bild mit Curl

8

Ich versuche , eine Base64 - codierte Bild von der Kommandozeile zu senden verwenden curlund base64wie folgt aus :

curl -X POST -H "Content-Type: application/json" -d '{"image" : $( base64 ~/Pictures/1.jpg )}' http://some/url/  

Ich erhalte jedoch eine Antwort, dass dies $ein unerwartetes Zeichen ist. Wie sende ich das Base64-codierte Bild?

Kleines Kind
quelle

Antworten:

20

@muru ist korrekt. Wenn Sie jedoch versuchen, eine JSON- Codierung zu senden , sind Ihre base64-Daten möglicherweise zu groß für die Befehlszeile, und Sie bevorzugen möglicherweise Folgendes:

(echo -n '{"image": "'; base64 ~/Pictures/1.jpg; echo '"}') |
curl -H "Content-Type: application/json" -d @-  http://some/url/ 

Das -X POSTist impliziert durch -d.

meuh
quelle
Ja, das ist viel besser.
Muru
Hallo, ich bin fehlgeschlagen, als ich versucht habe, diese kombinierte Befehlszeile über PHP-Code auszuführen. $ Html = shell_exec ($ str); Wenn ich $ str-Code kopiere und direkt in der Befehlszeile ausführe, ist das in Ordnung. Aber shell_exec hat nicht funktioniert, bitte helfen Sie :( Vielen Dank.
Bảo Nam
Haha, ich habe eine Bash-Datei erstellt, chmod + x diese Datei, dann meinen Befehl in die Datei geschrieben und shell_exec ('/ path to sh file / xxx.sh') ausgeführt. Ich habe wie ein Zauber gearbeitet. Vielen Dank.
Bảo Nam
1
@ BảoNam Ok, gute Lösung. Ich habe nicht viel über PHP und ich sehe keinen offensichtlichen Grund, warum die erste Version nicht funktioniert hat. Suchen Sie in der Fehlerprotokolldatei Ihres Servers nach Hinweisen. Ich denke, Sie sollten besser eine neue Frage stellen, wenn es um PHP geht.
Meuh
5

Bash wird nicht in einfache Anführungszeichen gesetzt. '{"image" : $( base64 ~/Pictures/1.jpg )}'wird wie besehen gesendet. Versuchen Sie stattdessen:

'{"image" : "'"$( base64 ~/Pictures/1.jpg)"'"}'

(Verlassen Sie das Eröffnungszitat, bevor Sie den Befehl ersetzen, und öffnen Sie dann erneut ein Zitat.)

muru
quelle
2
Sie müssen das Anführungszeichen doppelt angeben, da $()sonst die base64-Ausgabezeilen in mehrere Curl-Argumente aufgeteilt werden.
Meuh
Befehl für mehrere Bilddateien und Daten$ curl -d "name=Avatar&username=avatar&password=A1234567&[email protected]&token=16b185fe421d5017afb11691681906ed" --data-urlencode 'avatar='"$( base64 ~/Pictures/avatar004.jpg)"'' --data-urlencode 'image='"$( base64 ~/Pictures/avatar001.jpg)"'' --data-urlencode 'picture='"$( base64 ~/Pictures/577383.jpg)"'' http://localhost:8000/api/v1/users/register/
Moreno