Download Symfony2.1服务上传
我有一个关于使用Symfony 2.1提供文件的问题Download Symfony2.1服务上传,download,symfony-2.1,Download,Symfony 2.1,我有一个关于使用Symfony 2.1提供文件的问题 public function exampleFileAction(){ $response = new Response(); $d = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'File.xls'); $response->setContent(file_get_content
public function exampleFileAction(){
$response = new Response();
$d = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'File.xls');
$response->setContent(file_get_contents('../uploads/Bundle/Files/File.xls'));
$response->headers->set('Content-Disposition', $d);
return $response;
}
我上面的代码运行得很好,但它是这样做的实际方式吗?
获取包含文件内容的文件好吗
谢谢
tny于2013年3月编辑: 对于大文件,不应遵循此响应, 游戏中有一个新玩家: 它支持SendFile将文件下载委托给Apache/Ngnix,这样更好 编辑2013年5月: 令人敬畏的消息:一个内置解决方案现在在core中可用:
旧的响应: 有一个名为
streamdresponse
的新响应类,
它确实执行您正试图执行的操作,但是内存效率更高,并且由内核很好地处理
StreamedResponse表示流式HTTP响应。StreamdResponse对其内容使用回调。
回调应该使用标准的PHP函数,如echo 将响应流式传输回客户端。flush()方法 如果需要,也可以使用 因此,对于大型文件,您可以在不使用文件内容的情况下执行此操作:
我无法让Damien的解决方案在控制器中工作
以下是我要做的工作:
<?php
...
return new StreamedResponse(
function () use ($file) {
readfile($file);
}, 200, array(
'Content-Type' => 'image/png',
'Content-Disposition' => 'inline; filename="filename.png"')
);
你真的应该接受Damien的答案,因为这是正确的解决方案-karma Dude我无法提供mysql中以blob形式存储的pdf文件,而不是目录中的文件。别忘了使用Symfony\Component\HttpFoundation\ResponseHeaderBag;