响应内容types为CSV
我需要在HTTP响应中发送一个CSV文件。 如何将输出响应设置为CSV格式?
这不工作:
Response.ContentType = "application/CSV";
使用text/csv
是最合适的types。
您还应该考虑将Content-Disposition
标头添加到响应中。 通常,一个文本/ csv将被Internet Explorer直接加载到Excel的托pipe实例中。 这可能是也可能不是一个理想的结果。
Response.AddHeader("Content-Disposition", "attachment;filename=myfilename.csv");
以上将导致一个文件“另存为”对话框出现,这可能是你想要的。
根据RFC 4180 ,CSV的MIMEtypes是text / csv 。
多年来,我一直在为我所知的所有浏览器精心打造一套完美的头文件
// these headers avoid IE problems when using https: // see http://support.microsoft.com/kb/812935 header("Cache-Control: must-revalidate"); header("Pragma: must-revalidate"); header("Content-type: application/vnd.ms-excel"); header("Content-disposition: attachment; filename=$filename.csv");
使用text/csv
作为内容types。
尝试其中一种其他MIMEtypes(从这里http://filext.com/file-extension/CSV )
- 文本/逗号分隔值
- 文/ CSV
- 应用程序/ CSV
- 应用程序/ EXCEL
- 应用/ vnd.ms-Excel中
- 应用程序/ vnd.msexcel
另外,MIMEtypes可能区分大小写。
就这样使用
Response.Clear(); Response.ContentType = "application/CSV"; Response.AddHeader("content-disposition", "attachment; filename=\"" + filename + ".csv\""); Response.Write(t.ToString()); Response.End();
在ASP.net MVC中,可以使用FileContentResult
和File
方法:
public FileContentResult DownloadManifest() { byte[] csvData = getCsvData(); return File(csvData, "text/csv", "filename.csv"); }
如上所述设置内容types和内容configuration会导致不同浏览器的结果大不相同:
IE8:另存为对话框,并将Excel作为默认应用程序。 100%好。
Firefox:SaveAs对话框显示,但Firefox不知道它是一个电子表格。 build议用Visual Studio打开它! 50%好
Chrome:提示完全被忽略。 CSV数据显示在浏览器中。 0%好。
当然,在所有这些情况下,我指的是浏览器,因为它们从盒子里出来,没有定制MIME /应用程序映射。
我build议在'myfilename.cvs'前面插入一个'/'字符
Response.AddHeader("Content-Disposition", "attachment;filename=/myfilename.csv");
我希望你得到更好的结果。
我发现IE的问题在于,它嗅探返回的数据,并自行决定发送什么样的内容types。 这会导致一些副作用,例如总是打开文本文件的saveAs对话框,因为您正在使用数据trasnferes的压缩。 解决方法是(在PHP代码中)……
header('X-Content-Type-Options: nosniff');