Файл Excel, загруженный через WordPress rest api, поврежден - PullRequest
0 голосов
/ 14 октября 2019

Я работаю над приложением в WordPress, которому нужна возможность загрузить отчет. Когда пользователь выберет опцию экспорта, я позвоню в API Wordpress rest, который вызовет API клиента, который генерирует и возвращает необходимый отчет. При экспорте в csv все работает нормально, но при попытке экспортировать xlsx файл «поврежден». Вызов конечной точки API клиента напрямую через почтальон работает и возвращает функциональный файл Excel. Но при выполнении точно такого же вызова через wordpress возвращается буквальное строковое значение файла, заключенное в кавычки и с escape-символами для символов без визуального представления (например, байт значения 0x14 возвращается как \ n0020). У меня есть все комбинации установки заголовка типа контента на application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/octet-stream и кодировки контента на двоичный код.

Код wordpress, выполняющий вызов API и возвращающий результат, равен

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $endpoint);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, false);
$data = curl_exec($ch);
$err = curl_error($ch);

$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

curl_close($ch);
$array_data;

if ($err)
{
    $resData['message'] = "cURL Error #:" . $err;
}
else if( $code === 401 )
{
    $resData['message'] = "Client session has expired. Please re login.";
}
else
{
    $resData = $data;
}

$debug["endpoint"] = $endpoint;
$debug["token"] = $token;

return $resData;

1 Ответ

0 голосов
/ 15 октября 2019

Для дальнейшего использования проблема состоит в том, что строка curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); удаляется, и она не возвращается в виде буквенной строки. Файл по-прежнему «поврежден», но это похоже на проблему с офисом, так как его открытие в notepad ++ и сохранение без внесения каких-либо изменений делает его читаемым. Кроме того, при сравнении файла в шестнадцатеричном редакторе нет разницы между исходным читаемым файлом, «поврежденным» файлом и «исправленным» файлом.

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