отправить закодированное в base64 изображение с помощью curl

8

Я пытаюсь отправить base64 закодированный файл из командной строки , используя curlи base64как это:

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

Однако я получаю ответ, который говорит, что $это неожиданный знак. Как отправить изображение в кодировке base64?

Маленький ребенок
источник

Ответы:

20

@muru правильно, однако, если вы пытаетесь отправить json-код, ваши данные base64 могут быть слишком большими для командной строки, и вы можете предпочесть что-то вроде этого:

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

Это -X POSTподразумевается -d.

meuh
источник
Да, это намного лучше.
Муру
Привет, я не смог запустить эту комбинированную командную строку из кода PHP, $ html = shell_exec ($ str); если я скопирую код $ str и запускаю прямо в командной строке, это нормально. Но shell_exec не сработал, пожалуйста, помогите :( Большое спасибо.
Bảo Nam
Ха-ха, я создал файл bash, chmod + x этот файл, затем записал свою команду в файл и запустил shell_exec ('/ путь к файлу sh / xxx.sh'); я работал как шарм. Спасибо.
Bảo Nam
1
@ BảoNam Хорошо, хорошее решение. Я не очень разбираюсь в php и не вижу какой-либо очевидной причины, почему первая версия не работала. Посмотрите в файле журнала ошибок вашего сервера для подсказки. Я думаю, что было бы лучше начать новый вопрос, когда php участвует.
Мех
5

Bash не раскрывается в одинарных кавычках. '{"image" : $( base64 ~/Pictures/1.jpg )}'отправляется как есть. Вместо этого попробуйте:

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

(Выйдите из открывающей кавычки, прежде чем выполнять подстановку команд, затем снова откройте кавычку.)

Мур
источник
2
Вам нужно $()заключить в кавычки, иначе выходные строки base64 будут разбиты на несколько аргументов curl.
15:15
Несколько файлов изображений и команда данных$ 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