使用curl将base64编码的图像作为表单变量发送

时间:2013-09-24 04:27:25

标签: facebook facebook-graph-api curl base64 pycurl

我正在编写一个脚本,从电子邮件中提取图像并将其上传到Facebook。结果,我得到了用base64编码的图像数据,我想使用curl上传这些数据而不将图像数据保存到磁盘上的文件中。

以下是我的电子邮件正文:

Content-Type: multipart/mixed;
 boundary="------------030703050303060607000103"

This is a multi-part message in MIME format.
--------------030703050303060607000103
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

this message has a very small image of a single grey pixel attached to
it in jpeg format

--------------030703050303060607000103
Content-Type: image/jpeg;
 name="grey.jpg"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="grey.jpg"

/9j/4AAQSkZJRgABAQEAAQABAAD/2wBDAP//////////////////////////////////////
////////////////////////////////////////////////wgALCAABAAEBAREA/8QAFAAB
AAAAAAAAAAAAAAAAAAAAAP/aAAgBAQAAAAF//8QAFBABAAAAAAAAAAAAAAAAAAAAAP/aAAgB
AQABBQJ//8QAFBABAAAAAAAAAAAAAAAAAAAAAP/aAAgBAQAGPwJ//8QAFBABAAAAAAAAAAAA
AAAAAAAAAP/aAAgBAQABPyF//9oACAEBAAAAEH//xAAUEAEAAAAAAAAAAAAAAAAAAAAA/9oA
CAEBAAE/EH//2Q==
--------------030703050303060607000103--

以下命令有效,但需要我将数据保存到磁盘上的文件中(我正在努力避免)

curl \
   -F 'source=@pixel.jpg' \
   -F 'message=this message has a very small image of a single grey pixel attached to it in jpeg format' \
   -F 'access_token=<secret>' \
   https://graph.facebook.com/<user_id>/photos

以下命令不起作用,但它基本上就是我想要的

curl \
   -F 'source=/9j/4AAQSkZJRgABAQEAAQABAAD/2wBDAP//////////////////////////////////////////////////////////////////////////////////////wgALCAABAAEBAREA/8QAFAABAAAAAAAAAAAAAAAAAAAAAP/aAAgBAQAAAAF//8QAFBABAAAAAAAAAAAAAAAAAAAAAP/aAAgBAQABBQJ//8QAFBABAAAAAAAAAAAAAAAAAAAAAP/aAAgBAQAGPwJ//8QAFBABAAAAAAAAAAAAAAAAAAAAAP/aAAgBAQABPyF//9oACAEBAAAAEH//xAAUEAEAAAAAAAAAAAAAAAAAAAAA/9oACAEBAAE/EH//2Q==' \
   -F 'message=this message has a very small image of a single grey pixel attached to it in jpeg format' \
   -F 'access_token=<secret>' \
   https://graph.facebook.com/<user_id>/photos

显然,上面的命令不起作用。首先,我没有将数据的编码指定为base64。是否可以为单个字段指定编码,或者我是否必须为整个消息执行此操作(要求我将messageaccess_token字段编码为base64?)

一般情况下,请告诉我如何通过curl发送(base64编码)图像,而不先将数据保存到磁盘上的文件中。

TIA

1 个答案:

答案 0 :(得分:0)

您可以将其存储在一块内存中,而不是存储到磁盘:Example from libcurl

此外,您可以从curl( - help)尝试这些选项。

 -d, --data DATA     HTTP POST data (H)
     --data-ascii DATA  HTTP POST ASCII data (H)
     --data-binary DATA  HTTP POST binary data (H)
     --data-urlencode DATA  HTTP POST data url encoded (H)
     --egd-file FILE  EGD socket path for random data (SSL)
 -F, --form CONTENT  Specify HTTP multipart POST data (H)
     --form-string STRING  Specify HTTP multipart POST data (H)
     --ftp-account DATA  Account data string (F)