响应内容类型为CSV

时间:2008-12-26 09:32:41

标签: asp.net http csv

我需要在HTTP响应中发送CSV文件。如何将输出响应设置为CSV格式?

这不起作用:

Response.ContentType = "application/CSV";

11 个答案:

答案 0 :(得分:459)

使用text/csv是最合适的类型。

您还应该考虑在响应中添加Content-Disposition标头。通常,Internet Explorer将text / csv直接加载到托管的Excel实例中。这可能是也可能不是理想的结果。

Response.AddHeader("Content-Disposition", "attachment;filename=myfilename.csv");

以上将导致出现“另存为”对话框,这可能是您想要的。

答案 1 :(得分:131)

根据RFC 4180,CSV的MIME类型为 text / csv

答案 2 :(得分:52)

使用text/csv作为内容类型。

答案 3 :(得分:46)

多年来,我一直在为这个工具磨练一套完美的标题,这些标题在我所知道的所有浏览器中都非常出色

// 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");

答案 4 :(得分:23)

尝试其中一种其他mime类型(来自此处:http://filext.com/file-extension/CSV

  • 文本/逗号分隔值
  • 文本/ CSV
  • 应用/ CSV
  • 应用/ EXCEL
  • 应用/ vnd.ms-Excel中
  • 应用/ vnd.msexcel

此外,mime-type 可能区分大小写......

答案 5 :(得分:15)

就像那样使用

Response.Clear();
Response.ContentType = "application/CSV";
Response.AddHeader("content-disposition", "attachment; filename=\"" + filename + ".csv\"");
Response.Write(t.ToString());
Response.End();

答案 6 :(得分:5)

在ASP.net MVC中,您可以使用FileContentResultFile方法:

public FileContentResult DownloadManifest() {
    byte[] csvData = getCsvData();
    return File(csvData, "text/csv", "filename.csv");
}

答案 7 :(得分:3)

我发现IE的问题在于它会嗅探返回数据并自行决定它认为已发送的内容类型。这会导致许多副作用,例如始终打开文本文件的saveAs对话框,因为您正在使用数据传输的压缩。解决方案是(在PHP代码中)......

header('X-Content-Type-Options: nosniff');

答案 8 :(得分:2)

如上所述设置内容类型和内容处置会因不同的浏览器而产生大不相同的结果:

IE8:根据需要保存对话框,Excel作为默认应用程序。 100%好。

Firefox:SaveAs对话框确实显示,但Firefox不知道它是电子表格。建议用Visual Studio打开它! 50%好

Chrome:提示完全被忽略。 CSV数据显示在浏览器中。 0%好。

当然,在所有这些情况下,我指的是浏览器,因为它们来自框,没有自定义mime /应用程序映射。

答案 9 :(得分:2)

我建议在'filename.cvs'前面加一个'/'字符

Response.AddHeader("Content-Disposition", "attachment;filename=/myfilename.csv");

我希望你能得到更好的结果。

答案 10 :(得分:0)

对于C#MVC 4.5,您需要这样做:

Response.Clear();
Response.ContentType = "application/CSV";
Response.AddHeader("content-disposition", "attachment; filename=\"" + fileName + ".csv\"");
Response.Write(dataNeedToPrint);
Response.End();
return new EmptyResult();  //this line is important else it will not work.