2013-03-20 79 views
0

我就执行该代码使用CakePHP:下载一个CSV在Web浏览器中打开了不是一个Microsoft Excel

查看文件

<?php 
    if (isset($csv_filename)) { 
     header("Content-Disposition: attachment; filename=$csv_filename"); 
    } 
?> 
<?=$csv?> 

当我运行该页面并下载文件(打开方式),它正在谷歌浏览器或Firefox等网页浏览器上开放。我想这个文件被打开使用 enter image description here

我预期的输出应该是这样的:

enter image description here

其实,一切工作正常,因为我们迁移到CakePHP的2.2.2之前。

对此的任何想法,您的帮助将不胜感激!谢谢:)

回答

2

添加一个头告诉浏览器这是什么样的mimetype,就像这样;

header('Content-Type: application/vnd.ms-excel; charset=utf-8') 
+0

我应该在现在的代码上面写上那个吗? – PinoyStackOverflower 2013-03-20 06:50:31

+0

无关紧要,只需在将任何内容输出到浏览器之前进行即可。 – 2013-03-20 06:52:24

+0

@igorpan仍然无法正常工作。下载框看起来仍然像这样http://i.stack.imgur.com/kimyE.png – PinoyStackOverflower 2013-03-20 06:57:26

1

要将文件下载为CSV设置,请使用路由来检测CSV。在您的routes.php文件文件确保你设置了解析扩展的CSV: -

Router::parseExtensions('csv'); 

然后在你的控制器设置文件名的CSV,并确保您使用的是布局不输出标记(如默认ajax.ctp): -

$this->response->download("$csv_filename.csv"); 
$this->layout = 'ajax'; 

另外,还要确保你在你的控制器的组件列表RequestHandler: -

public $components = array('RequestHandler'); 

你只需把你的行动templat e在控制器视图的csv目录中。

如果它仍然不起作用,那么可能有一些标记正在输出,需要删除。 Cake的错误可以做到这一点。

+0

我已经更正了这些错误,但仍然会让我在我的问题的第一张图片上下载相同的图片 – PinoyStackOverflower 2013-03-20 15:07:58

+1

您确定该文件不包含HTML标记吗?保存文件并检查内容。如果文件中存在错误,获取在CakePHP中工作的CSV文件可能会有点痛苦。您可能想查看http://www.dereuromark.de/2011/11/21/serving-views-as-files-in-cake2/,其中详细介绍了我在此处为可下载的CSV文件提供的方法。 – drmonkeyninja 2013-03-20 15:49:11

相关问题