我需要在HTTP响应中发送CSV文件。如何将输出响应设置为CSV格式?
这不起作用:
Response.ContentType = "application/CSV";
我需要在HTTP响应中发送CSV文件。如何将输出响应设置为CSV格式?
这不起作用:
Response.ContentType = "application/CSV";
Answers:
使用text/csv
是最合适的类型。
您还应该考虑将Content-Disposition
标头添加到响应中。通常,Internet Explorer将text / csv直接加载到Excel的托管实例中。这可能是或可能不是理想的结果。
Response.AddHeader("Content-Disposition", "attachment;filename=myfilename.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)
此外,MIME类型可能区分大小写...
text/csv
为我工作
像那样使用
Response.Clear();
Response.ContentType = "application/CSV";
Response.AddHeader("content-disposition", "attachment; filename=\"" + filename + ".csv\"");
Response.Write(t.ToString());
Response.End();
return new EmptyResult()
以使文件名保持不变。否则IE会尝试将文件另存为ActionName.htm
。
如上所述设置内容类型和内容处置会在不同的浏览器中产生不同的结果:
IE8:“另存为”对话框,根据需要,将Excel作为默认应用程序。100%好。
Firefox:确实会出现“另存为”对话框,但是Firefox并不知道它是电子表格。建议使用Visual Studio打开它!50%好
Chrome:完全忽略了提示。CSV数据显示在浏览器中。0%好。
当然,在所有这些情况下,我指的是浏览器,因为它们是开箱即用的,没有对mime /应用程序映射进行自定义。
对于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.