我正在使用php将xls文件编码为base64。然后,我使用curl将其发送到我的服务器(使用API)。我将其解码,但是当我下载文件时,得到的文件不可读。
$xls = file_get_contents('/home/vacation/test.xls');
// Encode the image string data into base64
$data = base64_encode($xls);
通过curl发送文件
curl -X POST http://example.com/api/ -d 'data={//here goes a json with encoded file}'
答案 0 :(得分:0)
-X POST
大致翻译为CURLOPT_POST=>1
,而-d 'data={//here goes a json with encoded file}'
大致翻译为CURLOPT_POSTFIELDS=>json_encode(array('data'=>'here goes encoded file'))
,所以
$ch = curl_init('http://example.com/api/');
curl_setopt_array($ch, array(
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => json_encode(array(
'data' => base64_encode(file_get_contents('/home/vacation/test.xls'))
))
));
curl_exec($ch);
curl_close($ch);
..但是对于上传二进制文件,您根本不应该使用json / base64,而应该使用multipart / form-data,无论谁设计的api可能没有使用json和base64创建Web api的经验,糟糕的设计决策,imo。 (最糟糕的部分是,它使用的带宽比multipart / form-data的带宽大约高33%,但是multipart还具有curl cli使用-F参数的本机支持,以及PHP在$ _FILES参数中的本机支持,以及来自php-curl和CURLFile类的本地支持。同样,很难创建一个json&base64实现,其中整个文件不必一次在内存中以创建传输请求)