Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Download Symfony2.1服务上传_Download_Symfony 2.1 - Fatal编程技术网

Download Symfony2.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

我有一个关于使用Symfony 2.1提供文件的问题

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;