我正在使用Symfony 2制作“下载” Controller ,其唯一目的是发送 header ,以便我可以强制下载.csv文件,但无法正常工作。

$response = new Response();
$response->headers->set('Content-Type', "text/csv");
$response->headers->set('Content-Disposition', 'attachment; filename="'.$fileName.'"');
$response->headers->set('Pragma', "no-cache");
$response->headers->set('Expires', "0");
$response->headers->set('Content-Transfer-Encoding', "binary");
$response->headers->set('Content-Length', filesize($fileName));
$response->prepare();
$response->sendHeaders();
$response->setContent(readfile($fileName));
$response->sendContent();
$fileName"info.csv"字符串。这是我在 Controller 中执行的操作,没有return语句。当我尝试返回Response对象时,文件的内容显示在浏览器中,而不是预期的结果。

我发现的问题是,在某些页面中确实得到了info.csv file,但在另一些页面中,我得到的只是一条消息:
No webpage was found for the web address: http://mywebpage.com/downloadError 6 (net::ERR_FILE_NOT_FOUND): The file or directory could not be found.
我完全确定该文件存在,因此肯定还有其他错误。另外,routing.yml也可以正常工作,因为我确实从其他链接到该路径的页面上获取了该文件。
Apache错误日志未显示任何内容。

有人曾在Symfony 2上强制过下载.csv文件吗?如果是这样,我在做什么错?

最佳答案

这是一个在生产中可以正常工作的最小示例:

class MyController
public function myAction()

    $response = $this->render('ZaysoAreaBundle:Admin:Team/list.csv.php',$tplData);

    $response->headers->set('Content-Type', 'text/csv');
    $response->headers->set('Content-Disposition', 'attachment; filename="teams.csv"');

    return $response;

如果愿意,可以用新的response和response-> setContent替换render调用。

您对 Controller 内部没有return语句的评论令人困惑。 Controller 返回响应。让框架负责将内容发送到浏览器。

10-08 04:36
查看更多