envie imagem codificada em base64 usando curl

8

Estou tentando enviar uma imagem codificada em base64 a partir da linha de comando usando curle base64assim:

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

No entanto, recebo uma resposta dizendo que $é um token inesperado. Como envio a imagem codificada em base64?

Criança pequena
fonte

Respostas:

20

@muru está correto, no entanto, se você estiver tentando enviar um json codificando seus dados base64, pode ser muito grande para a linha de comando e você pode preferir algo como isto:

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

O -X POSTé implícito por -d.

meuh
fonte
Sim, isso é muito melhor.
Muru
Oi meuh, falhei ao tentar executar esta linha de comando combinada a partir do código PHP, $ html = shell_exec ($ str); se eu copiar o código $ str e executar diretamente na linha de comando, tudo bem. Mas o shell_exec não funcionou, por favor ajude :( muito obrigado. #
30518 Nam Nam
Haha, eu criei o arquivo bash, chmod + x, e escrevi meu comando para o arquivo e execute o shell_exec ('/ caminho para o arquivo sh / xxx.sh') ;, trabalhei como um encanto. Obrigado.
30818
1
@ BảoNam Ok, boa solução. Eu não gosto muito de php e não vejo nenhuma razão óbvia para a primeira versão não funcionar. Procure no arquivo de log de erros do seu servidor por pistas. Seria melhor começar uma nova pergunta quando o php estiver envolvido, eu acho.
Meu 30/0318
5

O Bash não se expande entre aspas simples. '{"image" : $( base64 ~/Pictures/1.jpg )}'é enviado como está. Em vez disso, tente:

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

(Saia da cotação de abertura antes de fazer a substituição do comando e abra uma cotação novamente.)

muru
fonte
2
Você precisa citar duas vezes, caso $()contrário as linhas de saída base64 serão divididas em vários argumentos de curvatura.
meuh
Arquivos de imagens múltiplas e dados de comando$ 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