我的控制器看起来像这样:
public function downloadAction($filename) {
// Adding url to filename
$path = $this->container->getParameter('remotepath').$filename;
// Checking if file exists
$ch = curl_init($path);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($code == 200) {
// Get the file
$file = file_get_contents($path);
// Generate Response
$response = new Response();
$d = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $filename);
$response->headers->set('Content-Disposition', $d);
$response->setContent($file);
} else {
$response = new Response();
$response->setContent('File not found. ('.$filename.')');
$response->headers->set('Content-Type', 'text/html');
$response->setStatusCode(404);
}
return $response;
}
我想要完成的是获取远程文件(图像,pdf,...)并强制下载此文件。 但由于某种原因,Symfony总是在浏览器中将标题和文件内容以纯文本( - >乱码)的形式输出。
我找不到原因!
修改 我改变了代码,我只创建一个空的Response()并将其返回给控制器。在使用文件名调用downloadAction时,我将标题内容写入浏览器窗口。 所以我用Firebug检查了标题,看起来Symfony用普通标题响应并打印我设置到内容的标题。关于我做错了什么的建议?
答案 0 :(得分:0)
通过在控制器方法中执行以下操作,可以使用RedirectResponse完成此操作。
return new RedirectResponse($yourRemoteDownloadUrl);
在此示例中,$yourRemoteDownloadUrl
是一个生活在Amazon S3存储桶中的PDF文件。
适用于Symfony 2和3。