Php Symfony 3.4-将API流文件传输到客户端下载

Php Symfony 3.4-将API流文件传输到客户端下载,php,download,stream,symfony-3.4,guzzle6,Php,Download,Stream,Symfony 3.4,Guzzle6,API向我发送一个流,其中包含我通过在请求的参数SelectedIds中提供它们的ID来选择的几个文件的zip存档。 我收到一个PSR7响应,并将其传递给HttpFoundationFactory,以返回与Symfony控制器应返回的内容相对应的响应 (目标是在客户端浏览器中下载zip文件。) 以下是我的控制器方法的内容 $client=$this->getApiClient(); $user=$this->getUser(); $idList=[51,52,53]; $psr7ApiRespo

API向我发送一个流,其中包含我通过在请求的参数
SelectedIds
中提供它们的ID来选择的几个文件的zip存档。 我收到一个PSR7响应,并将其传递给HttpFoundationFactory,以返回与Symfony控制器应返回的内容相对应的响应

(目标是在客户端浏览器中下载zip文件。)

以下是我的控制器方法的内容

$client=$this->getApiClient();
$user=$this->getUser();
$idList=[51,52,53];
$psr7ApiResponse=$client->post(“/v1/get-zip”[
“标题”=>[
'Authorization'=>sprintf('Bearer%s',$user->getToken()),
],
“http_错误”=>false,
“json”=>[
“SelectedDS”=>$idList,
],
]);
$httpFoundationFactory=新的httpFoundationFactory();
返回$httpFoundationFactory->createResponse($psr7ApiResponse);
它在本地工作得很好,但在服务器上我什么也没有收到,空白页。你知道我应该怎么看吗?因为我没有错误日志,看起来流是空的,但我不知道如何检查


我和邮递员一起测试了API,一切正常;我的控制器也会向我发回一个200

按照这些步骤调试问题:

1。检查
$psr7ApiResponse
的内容是否有效和正确

你在一个不同的环境中。可能由于某些原因,您的服务器端脚本没有收到有效的答案。也许身份验证不起作用。根据需要将收到的答案打印到某个日志文件中(使用记录器: )

如果调用的内容或结果类不正确,则问题出在远程调用通信中,您必须对此进行调试。很可能是这样

2。检查您的客户是否真正理解答案,并检查答案是否正确

您的客户绝对不应该收到空白页(这表明问题是1)

尝试使用
Symfony\Component\HttpFoundation\file\file
显式返回文件

您还可以手动将某些ZIP头设置为
响应
对象-至少用于调试:

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

您是否已尝试在生产中将http_errors设置为true?是,无错误一切正常:'(但是响应似乎是空的,
$psr7ApiResponse
?它应该包含一个状态代码和一些标题,希望能够包含更多信息。您是否完全启用了PHP中的错误报告功能?我确实没有错误,它在本地运行得很好,但不是在线运行的。所有状态代码都是200。很难调试。它当我将提要内容传输到浏览器时,提要内容之类的ook并没有完全返回到我的后端。同一API中有任何其他函数,它们不会下载ZIP(例如,简单的GET或POST),您可以在PROD上进行测试,以确定这是整个API的问题,还是与此特定流程隔离?如果是前者,请确认您的API端点没有IP白名单限制,无法阻止其发送PROD服务器响应。您是否可以在
$psr7ApiResponse
中发布响应。