【发布时间】:2018-05-22 10:09:50
【问题描述】:
各位程序员您好!
我正在寻找一种解决方案来显示一个 html 页面,而我的 php 代码会准备一个 .zip,然后下载它。原因是有时拉链会很大,而且制作起来需要时间。
HTML 页面将是一个基本的“正在准备您的 .zip 文件,请稍候”。 使用的 PHP 端是 Symfony。所以我通过调用https://myapi.com/orders/orderid/inbox/export 进入我的getInboxExportAction 函数。
下载功能 (makeExportDownloadRequestResponse) 工作正常。但是,如果我在 $response 后添加一个刷新,.zip 会打印到 html,而不是被下载...
public function getInboxExportAction(Request $request, $orderId)
{
$response = new Response($this->twig->render('base.html.twig',
['content' => '
<h1>Download</h1>
<p>Your zip is being prepared for download, please wait...</p>
']));
$response->headers->set('Content-Type', 'text/html');
//Here I would like to echo + flush my html.
//Then stop the flush and continue my code
$receivedOrder = $this->fetchRequestedReceivedOrder($orderId);
if (!$receivedOrder instanceof ReceivedOrder) {
return $receivedOrder;
}
if (!$receivedOrder->getSentorder()) {
$this->makeErrorResponse('Sent order was not found', Response::HTTP_BAD_REQUEST);
}
return $this->makeExportDownloadRequestResponse($receivedOrder->getSentorder(), $request->get('format'));
}
我也非常愿意接受任何人必须解决此问题的任何其他想法:)
谢谢,
编辑:我的 $this->makeExportDownloadRequestResponse() 函数返回响应,而不是路径。出于存储原因,我们取消链接服务器上的文件。
$content = file_get_contents($zipTmpFile);
unlink($zipTmpFile);
$response = new Response($content);
$dispositionHeader = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT,
'myFile_' . date('Y_m_d_h_i_s') . '.zip');
$response->headers->set('Content-Disposition', $dispositionHeader);
return $response;
第二次编辑:我知道我正在尝试做的事情(在一次通话中更改内容类型)我通常不赞成。我目前正在尝试想一个更优雅的解决方案。
【问题讨论】: