如何在base64中编码xls文件?

时间:2019-05-23 12:27:46

标签: php curl base64

我正在使用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}'

1 个答案:

答案 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实现,其中整个文件不必一次在内存中以创建传输请求)