envoyer une image encodée en base64 en utilisant curl

8

J'essaie d'envoyer une image encodée en base64 à partir de la ligne de commande en utilisant curlet base64comme ceci:

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

Cependant, je reçois une réponse disant que $c'est un jeton inattendu. Comment envoyer l'image encodée en base64?

Petit enfant
la source

Réponses:

20

@muru est correct, cependant si vous essayez d'envoyer un codage json, vos données base64 peuvent être trop grandes pour la ligne de commande et vous pouvez préférer quelque chose comme ceci:

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

Le -X POSTest sous-entendu par -d.

meuh
la source
Oui, c'est beaucoup mieux.
muru
Salut meuh, j'ai échoué lorsque j'essaie d'exécuter cette ligne de commande combinée à partir du code PHP, $ html = shell_exec ($ str); si je copie du code $ str et que j'exécute directement en ligne de commande, ça va. Mais shell_exec n'a pas fonctionné, aidez-moi :( merci beaucoup.
Bảo Nam
Haha, j'ai créé le fichier bash, chmod + x ce fichier, puis écris ma commande dans le fichier et exécutez shell_exec ('/ chemin vers le fichier sh / xxx.sh') ;, j'ai travaillé comme un charme. Merci.
Bảo Nam
1
@ BảoNam Ok, bonne solution. Je ne parle pas beaucoup de php, et je ne vois aucune raison évidente pour laquelle la première version n'a pas fonctionné. Recherchez des indices dans le fichier journal des erreurs de votre serveur. Vous feriez mieux de commencer une nouvelle question lorsque php est impliqué, je pense.
meuh
5

Bash ne se développe pas entre guillemets simples. '{"image" : $( base64 ~/Pictures/1.jpg )}'est envoyé tel quel. Essayez plutôt:

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

(Quittez le guillemet d'ouverture avant d'effectuer la substitution de commande, puis ouvrez à nouveau un devis.)

muru
la source
2
Vous devez entre guillemets $()sinon les lignes de sortie base64 seront divisées en plusieurs arguments curl.
meuh
Fichiers d'images multiples et commande de données$ 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