curlを使用してbase64でエンコードされた画像を送信する


8

私が使用してコマンドラインからのbase64エンコードされた画像を送信しようとしていますcurlbase64、このように:

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


はい、これははるかに良いです。
muru 2015

こんにちは、PHPコードからこの結合されたコマンドラインを実行しようとしたときに失敗しました。$ html = shell_exec($ str); $ strコードをコピーしてコマンドラインで直接実行すると、問題ありません。。しかし、もしくはshell_execは仕事、助けてください:(そんなにあなたに感謝しませんでした
BAOナム

ハハ、私はbashファイルを作成し、chmod + xそのファイルを作成してから、コマンドをファイルに書き込み、shell_exec( '/ path to sh file / xxx.sh');を実行しました。ありがとう。
BAOナム

1
@BảoNamOK、良い解決策。私はphpについてはあまり詳しくありません。また、最初のバージョンが機能しなかった明白な理由はわかりません。手がかりについては、サーバーのエラーログファイルを確認してください。私は、phpが関係しているときに新しい質問を始める方がよいと思います。
meuh

5

Bashは単一引用符で展開されません。'{"image" : $( base64 ~/Pictures/1.jpg )}'そのまま送信されます。代わりに、試してください:

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

(コマンド置換を行う前に開始引用符を終了してから、もう一度引用符を開きます。)


2
$()base64の出力行がいくつかのcurl引数に分割される場合は、二重引用符で囲む必要があります。
meuh 2015

複数の画像ファイルとデータコマンド$ 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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.