如何使用CSV MIME类型?


125

在我正在使用的Web应用程序中,用户可以单击指向CSV文件的链接。没有为mime-type设置标题,因此浏览器仅将其呈现为文本。我希望此文件以.csv文件的形式发送,因此用户可以直接使用calc,excel,gnumeric等打开它。

header('Content-Type: text/csv');
echo "cell 1, cell 2";

此代码可以在我的计算机上正常工作(不是一直如此吗?),但在另一台计算机上不起作用。

我的浏览器是FF 3.0.1(在Linux上)的每晚构建。它无法使用的浏览器是IE 7和FF 3.0(在Windows上)

我有没有意识到的怪癖?

Answers:


219

您可以尝试执行以下操作来强制浏览器打开“另存为...”对话框:

header('Content-type: text/csv');
header('Content-disposition: attachment;filename=MyVerySpecial.csv');
echo "cell 1, cell 2";

在大多数主流浏览器上都可以使用。


12

您未指定语言或框架,但以下标头用于文件下载:

"Content-Disposition: attachment; filename=abc.csv"

5

使用Internet Explorer,通常还必须指定Pragma:public标头,以使下载正常运行。

header('Pragma: public');

就是我的2美分


5
语用说明:对于Internet Explorer,公众毫无意义。(我正在研究有问题的组件,并且删除了源代码)。
EricLaw 2013年

可能的实际用途是替换先前存在的Pragma:无缓存头?
Doin 2014年

2

此代码可用于导出任何文件,包括csv

// application/octet-stream tells the browser not to try to interpret the file
header('Content-type: application/octet-stream');
header('Content-Length: ' . filesize($data));
header('Content-Disposition: attachment; filename="export.csv"');

2
“ octetstream”是指“ octet-stream”
EricLaw 2013年

2
这可能会在某些浏览器中引发警告:资源被解释为文档,但以MIME类型application / octet-stream传输
mikeschuld 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.