2008-12-26 58 views
280

我需要在HTTP響應中發送CSV文件。如何將輸出響應設置爲CSV格式?回覆內容類型爲CSV

這不是工作:

Response.ContentType = "application/CSV"; 

回答

418

使用text/csv是最合適的類型。

您還應該考慮在響應中添加Content-Disposition標頭。通常,文本/ csv將由Internet Explorer直接加載到Excel的託管實例中。這可能會或可能不會是一個理想的結果。

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

以上將導致文件「另存爲」對話框出現,這可能是你想要的。

+4

Firefox 3.0.10似乎要求標題的值是相反的順序:attachment; filename = myfilename.csv – 2009-05-21 18:39:31

+3

根據RFC#2183,首先是類型(附件),然後是參數(文件名等) – 2009-11-10 13:18:04

+0

糾正了標頭值的排序。 – 2009-11-11 02:49:03

45

使用text/csv作爲內容類型。

+0

沒錯,你應該在使用文字申請地點。 – Biswanath 2008-12-26 10:21:14

23

嘗試這些其他的mime類型之一(從這裏:http://filext.com/file-extension/CSV

  • 文本/逗號分隔值
  • 文本/ CSV
  • 應用/ CSV
  • 應用/ EXCEL
  • application/vnd.ms-excel
  • application/vnd.msexcel

而且,MIME類型可能區分大小寫...

2

設置內容類型和內容的配置如上述那樣產生似地不同的結果不同的瀏覽器:

IE8:另存爲如所期望對話框和Excel作爲默認的應用程序。 100%好。

Firefox:SaveAs對話框顯示出來,但Firefox並不知道它是一個電子表格。建議用Visual Studio打開它! 50%不錯

Chrome:提示完全被忽略。 CSV數據顯示在瀏覽器中。 0%好。

當然,在所有這些情況下,我指的是瀏覽器,因爲它們是從它們出來的,沒有定製MIME /應用程序映射。

15

只是用這樣

Response.Clear(); 
Response.ContentType = "application/CSV"; 
Response.AddHeader("content-disposition", "attachment; filename=\"" + filename + ".csv\""); 
Response.Write(t.ToString()); 
Response.End(); 
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"); 
2

所有的瀏覽器,我建議工作出色在'myfilename前面插入'/'字符。cvs'

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

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

2

我發現IE的問題在於它嗅探返回的數據並且自行決定它認爲發送了哪些內容類型。這會導致一些副作用,例如始終打開文本文件的saveAs對話框,因爲您正在使用數據trasnferes的壓縮。解決的方法是(在php代碼)......

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

在ASP.net MVC,你可以使用一個FileContentResultFile方法:

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