enviar imagen codificada en base64 usando curl

8

Estoy tratando de enviar una imagen codificada en base64 desde la línea de comando usando curly base64así:

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

Sin embargo, recibo una respuesta que dice que $es un token inesperado. ¿Cómo envío la imagen codificada en base64?

Niño pequeño
fuente

Respuestas:

20

@muru es correcto, sin embargo, si está intentando enviar una codificación json, sus datos de base64 pueden ser demasiado grandes para la línea de comando y puede preferir algo como esto:

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

El -X POSTestá implícito en -d.

meuh
fuente
Si, esta mucho mejor.
muru
Hola meuh, fallé cuando intento ejecutar esta línea de comando combinada desde el código PHP, $ html = shell_exec ($ str); si copio el código $ str y ejecuto directamente en la línea de comando, está bien. Pero shell_exec no funcionó, por favor ayuda :( muchas gracias.
Bảo Nam
Jaja, creé el archivo bash, chmod + x ese archivo, luego escribí mi comando en el archivo y ejecuté shell_exec ('/ ruta al archivo sh / xxx.sh'); trabajé como un encanto. Gracias.
Bảo Nam
1
@ BảoNam Ok, buena solución. No sé mucho sobre php, y no veo ninguna razón obvia por la que la primera versión no funcionó. Busque pistas en el archivo de registro de errores de su servidor. Creo que sería mejor comenzar una nueva pregunta cuando php está involucrado.
Meuh
5

Bash no se expande entre comillas simples. '{"image" : $( base64 ~/Pictures/1.jpg )}'se envía tal cual. En cambio, intente:

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

(Salga de la cita de apertura antes de realizar la sustitución del comando y luego vuelva a abrir una cita).

muru
fuente
2
Necesita comillas dobles; de lo $()contrario, las líneas de salida de base64 se dividirán en varios argumentos curl.
meuh
Múltiples archivos de imágenes y comando de datos$ 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