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?

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.


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.)


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=avatar@user.com&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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.