API向我发送一个包含多个文件的zip存档的流,我通过在请求的参数SelectedIds
中提供这些文件的id来选择这些文件。我收到一个PSR7响应,我将其传递给HttpFoundationFactory以返回一个与Symfony控制器应返回的内容相对应的响应。
(目标是在客户端浏览器中下载zip。(
以下是我的控制器方法的内容
$client = $this->getApiClient();
$user = $this->getUser();
$idList = [51,52,53];
$psr7ApiResponse = $client->post('/v1/get-zip', [
'headers' => [
'Authorization' => sprintf('Bearer %s', $user->getToken()),
],
'http_errors' => false,
'json' => [
'SelectedIds' => $idList,
],
]);
$httpFoundationFactory = new HttpFoundationFactory();
return $httpFoundationFactory->createResponse($psr7ApiResponse);
它在本地工作得很好,但在服务器上我什么也没收到,空白页。你知道我应该怎么看吗,因为我没有错误日志,看起来流是空的,但我不知道如何检查。
我和邮递员一起测试了API,没问题;我的控制器也给我发了一个200的
按照以下步骤调试问题:
1.检查$psr7ApiResponse
的内容是否有效和正确
你处在一个不同的环境中。可能由于某种原因,您的服务器端脚本没有收到有效的答案。也许身份验证不起作用。根据需要,将您收到的答案打印调试到一些日志文件中(使用记录器:https://symfony.com/doc/current/logging.html)。
如果调用的内容或生成的类不正确,则问题出现在远程调用通信中,您必须对此进行调试。情况很可能就是这样。
2.检查您的客户是否真正理解答案,并检查答案是否正确
你的客户绝对不应该收到空白页(这表明问题是1(。
尝试使用SymfonyComponentHttpFoundationFileFile
显式返回文件。
您还可以手动将某些ZIP标头设置为Response
对象,至少用于调试:
// set example variables
$filename = "zip-to-download.zip";
$filepath = "/path"; // maybe save the response to a temp file for debugging purposes
$response = $httpFoundationFactory->createResponse($psr7ApiResponse);
$response->headers->set('Pragma','public');
$response->headers->set('Expires',0);
$response->headers->set('Cache-Control','must-revalidate, post-check=0, pre-check=0');
$response->headers->set('Content-Description','File Transfer');
$response->headers->set('Content-type','application/octet-stream');
$response->headers->set('Content-Disposition','attachment; filename="'.$filename.'"');
$response->headers->set('Content-Transfer-Encoding','binary');
return $response;