Как кодировать файл xls в base64? - PullRequest
0 голосов
/ 23 мая 2019

Я кодирую файл 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}'

1 Ответ

0 голосов
/ 24 мая 2019

-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, вероятно, не имел опыта создания web-apis, используя json и base64 хреновое дизайнерское решение, имо. (хуже всего то, что он использует примерно на 33% больше пропускной способности, чем multipart / form-data, но multipart также имеет встроенную поддержку из curl cli с параметром -F и встроенную поддержку PHP в параметре $ _FILES, и встроенная поддержка php-curl с классом CURLFile. Также сложно создать json & base64-реализацию, в которой весь файл не должен быть сразу в памяти для создания запроса на передачу)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...