374

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

这不起作用:

Response.ContentType = "application/CSV";
4

11 回答 11

550

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

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

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

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

于 2008-12-26T11:26:39.887 回答
188

CSV 的 MIME 类型text/csv符合RFC 4180

于 2009-03-16T18:47:19.113 回答
76

用作text/csv内容类型。

于 2008-12-26T09:36:43.023 回答
54

多年来,我一直在为此磨练一套完美的标头,这些标头在我所知道的所有浏览器中都能出色地工作

// 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");
于 2009-11-12T01:11:39.870 回答
29

尝试其中一种其他 mime 类型(来自这里: http: //fileext.com/file-extension/CSV

  • 文本/逗号分隔值
  • 文本/csv
  • 应用程序/csv
  • 应用程序/excel
  • 应用程序/vnd.ms-excel
  • 应用程序/vnd.msexcel

此外,mime 类型可能区分大小写......

于 2008-12-26T09:37:12.663 回答
15

就这样使用

Response.Clear();
Response.ContentType = "application/CSV";
Response.AddHeader("content-disposition", "attachment; filename=\"" + filename + ".csv\"");
Response.Write(t.ToString());
Response.End();
于 2009-04-28T12:54:13.677 回答
5

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

public FileContentResult DownloadManifest() {
    byte[] csvData = getCsvData();
    return File(csvData, "text/csv", "filename.csv");
}
于 2013-07-25T11:35:41.417 回答
3

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

header('X-Content-Type-Options: nosniff');
于 2012-02-16T12:20:31.643 回答
2

如上所述设置内容类型和内容配置会在不同的浏览器中产生截然不同的结果:

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

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

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

当然,在所有这些情况下,我指的是开箱即​​用的浏览器,没有自定义 mime/应用程序映射。

于 2009-04-28T01:39:03.520 回答
2

我建议在 'myfilename.cvs' 前面插入一个 '/' 字符

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

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

于 2011-06-13T21:59:36.793 回答
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.
于 2018-03-27T11:35:41.883 回答