Я кодирую файл xls в base64, используя php. Затем я отправляю его с помощью 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}'






-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, вероятно, не имел опыта в создании веб-API, использование json и base64 - дерьмовый дизайн решение, имхо. (худшая часть этого заключается в том, что он использует примерно на 33% больше пропускной способности, чем у multipart/form-data, но multipart также имеет встроенную поддержку от curl cli с параметром -F и встроенную поддержку от PHP в параметре $_FILES, и нативная поддержка от php-curl с классом CURLFile.также сложно сделать json&base64-реализацию где не обязательно весь файл сразу в памяти находиться для создания запроса на перенос)
Насколько я понимаю, они используют base64 и json, потому что вы можете отправлять файлы И файлы.
@pepe_botika69, так что можно использовать multipart/form-data. здесь я отправляю 1 файл и 2 поля, смотрите: i.imgur.com/1Mduir8.png
как вы храните его на стороне сервера? проблема ВОЗМОЖНО в нем. Кроме того, почему вы используете кодировку json и base64? вместо этого вы должны использовать
multipart/form-data, и curl (через параметр -F, напримерcurl -F data=@file http://example.com/api), и php (через $_FILES) имеют встроенную поддержку загрузки файлов с multipart/form-data, и вы также избегаете 33% накладных расходов base64