【问题标题】:Excel file downloaded through Wordpress rest api is corrupted通过 Wordpress rest api 下载的 Excel 文件已损坏
【发布时间】:2019-10-14 20:43:36
【问题描述】:

我正在开发一个需要能够下载报告的 wordpress 应用程序。当用户选择导出选项时,我将调用 Wordpress rest api,该 API 会调用生成并返回必要报告的客户端 api。导出 csv 时一切正常,但尝试导出 xlsx 时,文件“损坏”。通过 postman 直接调用客户端的 api 端点工作并返回一个功能性的 excel 文件。但是,当通过 wordpress 进行完全相同的调用时,将返回文件的文字字符串值,并用引号和转义字符包裹没有视觉表示的字符(例如,值 0x14 的字节返回为 \n0020)。我拥有将内容类型标头设置为application/vnd.openxmlformats-officedocument.spreadsheetml.sheetapplication/octet-stream 并将内容编码设置为二进制的所有组合。

执行api调用并返回结果的wordpress代码是

$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;

【问题讨论】:

    标签: php wordpress


    【解决方案1】:

    为了将来的参考,问题是 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 删除该行,它不会作为文字字符串返回。该文件仍然“损坏”,但这似乎是办公室的问题,因为在记事本++中打开它并保存它而不进行任何更改使其可读。此外,在十六进制编辑器中比较文件时,原始可读文件、“损坏”文件和“修复”文件之间没有区别。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-23
      • 2017-05-09
      • 2014-10-26
      • 2017-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多