2014-09-02 102 views
0

我遇到了生成文件的问题。这里是我的行动:Symfony:强制下载生成的文件

<?php 
public function exportAction() 
{ 
    $this->checkSecurity('EDIT'); 

    $config = $this->getConfiguration(); 
    $resource = $this->findOr404(); 

    $style = $this->render($config->getTemplate('export.css'), array(
     'resource' => $resource 
    )); 

    $response = new Response(); 
    $response->headers->set('Cache-Control', 'private'); 
    $response->headers->set('Content-type', 'plain/text'); 
    $response->headers->set('Content-type', 'application/octet-stream'); 
    $response->headers->set('Content-Disposition', 'attachment; filename="style-' . $resource->getSlug() . '.css";'); 
    $response->sendHeaders(); 
    $response->setContent($style); 

    return $response; 
} 

我的文件下载,但它的内容有开头:

HTTP/1.0 200 OK 
Cache-Control: no-cache 
Date:   Tue, 02 Sep 2014 09:16:34 GMT 

有谁知道为什么吗?

回答

0

我不使用响应作为生成的文件下载的回报。

我只需填写然后一个变量它显示如下:

$style = $this->render($config->getTemplate('export.css'), array(
    'resource' => $resource 
)); 


    header("Content-Type: text/calendar; filename='style-" . $resource->getSlug() . ".css'"); 
    header('Content-Length: '.strlen($style); 
    header("Content-Transfer-Encoding: binary"); 
    header("Content-Disposition: inline; filename='style-" . $resource->getSlug() . ".css'"); 
    header("Expires: 0"); 
    header("Cache-Control: no-cache, must-revalidate"); 
    header("Pragma: no-cache"); 

echo $style; 
exit; 

我知道这是不是绝对的物体侧的代码,但它完全适用于产生集成电路的千我们项目的一个内日常的文件

+0

可能重复:http://stackoverflow.com/questions/13010411/symfony2-force-file-download?rq=1 – 2014-09-02 12:04:33

+0

我想你的代码。该文件不下载。我仍然有“HTTP/1.0 200 OK缓存控制:无缓存日期:星期二,2014年9月02日14:19:10 GMT”显示在我的屏幕上之前的CSS代码我想下载 – 2014-09-02 14:20:54

+0

我添加了$回应 - > sendHeaders()。现在该文件已成功下载,但我仍然有“HTTP/1.0 200 OK Cache-Control:no-cache Date:Wed,02 Sep 2014 14:22:02 GMT”开头... – 2014-09-02 14:23:55

0

我终于找到了解决方案。我忘了的getContent()上渲染

<?php 
public function exportAction() 
{ 
    $this->checkSecurity('EDIT'); 

    $config = $this->getConfiguration(); 
    $resource = $this->findOr404(); 

    $style = $this->render($config->getTemplate('export.css'), array(
     'resource' => $resource 
    )); 

    $response = new Response(); 
    $response->headers->set('Cache-Control', 'private'); 
    $response->headers->set('Content-type', 'plain/text'); 
    $response->headers->set('Content-type', 'application/octet-stream'); 
    $response->headers->set('Content-Disposition', 'attachment; filename="style-' . $resource->getSlug() . '.css";'); 
    $response->sendHeaders(); 
    $response->setContent($style->getContent()); 

    return $response; 
} 
+0

我很高兴你终于找到了,我的方法也可以工作,但我认为$ style实际上是你的内容变量。 – 2014-09-02 14:35:05