使用curl发送base64编码的图像


8

我试图从使用命令行发送base64编码的图像curlbase64这样的:

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

但是,我得到一个回复​​,说这$是意外令牌。如何发送base64编码的图像?

Answers:


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

嗨,我尝试从PHP代码运行该组合的命令行时失败了:$ html = shell_exec($ str); 如果我复制$ str代码并直接在命令行中运行,那就很好。但是shell_exec无法正常工作,请帮助:(非常感谢。
BảoNam 18'Mar

哈哈,我创建了一个bash文件,chmod + x该文件,然后将我的命令写入文件并运行shell_exec('/ sh文件的路径/xxx.sh');,我的工作很有趣。谢谢。
宝南

1
@BảoNam好的,好的解决方案。我对php的了解不多,也看不出第一个版本不起作用的任何明显原因。在服务器的错误日志文件中查找线索。我认为,当涉及到php时,最好还是开始一个新问题。
meuh '18

5

Bash不会以单引号引起来。'{"image" : $( base64 ~/Pictures/1.jpg )}'照原样发送。相反,请尝试:

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

(在执行命令替换之前先退出开头的引号,然后再次打开引号。)


2
您需要双引号,$()否则base64输出行将被拆分为多个curl参数。
meuh

多个图像文件和数据命令$ 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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.