【发布时间】: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.sheet、application/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;
【问题讨论】: