English 中文(简体)
响应的内容类型为 CSV
原标题:
  • 时间:2008-12-26 09:32:40
  •  标签:

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

这不起作用。

Response.ContentType = "application/CSV";
最佳回答

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

您还应考虑将Content-Disposition头添加到响应中。通常,Internet Explorer会将text/csv文件直接加载到Excel的托管实例中。这可能是一个希望的结果,也可能不是。

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

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

问题回答

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

使用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");

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

  • text/comma-separated-values
  • text/csv
  • application/csv
  • application/excel
  • application/vnd.ms-excel
  • application/vnd.msexcel

还有,mime类型可能区分大小写...

就这样使用

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

我发现IE的问题是它嗅探返回数据并自己判断它认为已经发送了什么内容类型。这会引起一些副作用,例如始终为文本文件打开保存对话框,因为您正在使用数据传输压缩。解决方案是(在php代码中)......

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

我建议在“myfilename.cvs”的前面插入一个“/”字符。

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

我希望你能取得更好的成绩。

按照上述方式设置内容类型和内容分发会在不同的浏览器中产生极其不同的结果:

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

Firefox:「另存为」对话框确实会弹出,但 Firefox 不知道它是电子表格。建议使用 Visual Studio 打开!50%好。

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

当然,在所有这些情况下,我指的是浏览器默认的状态,没有定制MIME/application映射。

对于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.




相关问题
热门标签