响应内容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中,可以使用FileContentResultFile方法:

 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');