symfony下载文件

时间:2012-09-27 04:33:50

标签: php http-headers symfony-1.4 download attachment

我有一个带有symfony 1.4的项目,在一个动作中将mysql表导出到.csv文件然后从服务器下载它,我正在使用Wampserver进行本地开发,一切正常,但是,当我上传到生产服务器,现在,如果你试图导出数据,.csv文件会在浏览器中自动打开,而不会询问你是否要保存或打开它,我在创建.csv后使用的代码就是这个< / p>

$this->setLayout(false);
sfConfig::set('sf_web_debug', false);
$this->getResponse()->setHttpHeader('Content-Type', 'text/csv');
$this->getResponse()->setHttpHeader('Content-Disposition', 'attachment; filename="file.csv"');
$this->getResponse()->setHttpHeader('Pragma', 'no-cache');
$this->getResponse()->setHttpHeader('Expires', '0');
readfile(sfConfig::get('sf_upload_dir') . "/export/file.csv");
return sfView::NONE;

我再说一遍,在我的本地服务器上这项工作没问题,浏览器给我打开或保存的选项,现在,这是代码的问题,服务器中的设置还是其他什么?

文件用utf-8编码保存,这是问题吗?

感谢

2 个答案:

答案 0 :(得分:0)

感谢评论,我可以让它工作,我所做的是将内容类型更改为@ j0k建议,并重定向到文件而不是使用readfile函数

$this->getResponse()->setHttpHeader('Content-Type', 'application/csv');
$this->redirect('/uploads/export/file.csv');

现在正在运作

感谢

答案 1 :(得分:0)

另一种不重定向的方法如下:

  $this->getResponse()->clearHttpHeaders();
  $this->getResponse()->setHttpHeader('Content-Description','File Transfer');
  $this->getResponse()->setHttpHeader('Content-Type', 'application/csv');
  $this->getResponse()->setHttpHeader('Content-Disposition','attachment;filename='.$file_name); 
  $this->getResponse()->setHttpHeader('Pragma', '');
  $this->getResponse()->setHttpHeader('Cache-Control', '');
  $this->getResponse()->sendHttpHeaders(); 
  $this->renderText($fwrite('php://output',$stuff));

保存文件或将文件写入'php:// output'。