CSVとしての応答コンテンツタイプ


328

HTTP応答でCSVファイルを送信する必要があります。出力応答をCSV形式で設定するにはどうすればよいですか?

これは機能していません:

Response.ContentType = "application/CSV";

回答:


491

使用text/csvは最も適切なタイプです。

またContent-Disposition、応答にヘッダーを追加することも検討する必要があります。多くの場合、text / csvは、Internet ExplorerによってホストされているExcelのインスタンスに直接読み込まれます。これは望ましい結果である場合とそうでない場合があります。

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

上記により、ファイルの[名前を付けて保存]ダイアログが表示され、意図したとおりになる場合があります。


2
その文字列を作成するためにSystem.Net.Mime.ContentDispositionオブジェクトを使用したいです。
ロニーオーバーバイ2012年


62

text/csvコンテンツタイプとして使用します。


48

長年にわたって、私が知っているすべてのブラウザーで見事に機能するヘッダーの完璧なセットを磨き続けてきました

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

7
application / vnd.ms-excelを使用する場合。osx safariでは、「。xls」ファイル拡張子が追加されます
Luke Smith

28

これらの他のMIMEタイプのいずれかを試してください(ここから:http : //filext.com/file-extension/CSV

  • text / comma-separated-values
  • テキスト/ csv
  • application / csv
  • アプリケーション/エクセル
  • application / vnd.ms-excel
  • application / vnd.msexcel

また、mimeタイプ大文字と小文字が区別される場合があります...


15

そのまま使う

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

クライアントがFirefoxの場合、ファイル名を二重引用符で囲むことで修正されました。
グラハム、

1
これをMVCコントローラーで使用している場合は、コントローラーのメソッドを終了return new EmptyResult()して、ファイル名を固定する必要があります。そうでない場合、IEはファイルをとして保存しようとしますActionName.htm
3Dave

5

ASP.net MVCでは、FileContentResultおよびFileメソッドを使用できます。

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

3

IEの問題は、返されたデータを盗聴し、送信されたと考えられるコンテンツタイプについて自分で判断することです。データ転送の圧縮を使用しているため、テキストファイルのsaveAsダイアログを常に開くなど、これによって引き起こされるいくつかの副作用があります。解決策は(phpコードで)......

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

2

上記のようにコンテンツタイプとコンテンツの配置を設定すると、ブラウザによって結果が大きく異なります。

IE8:必要に応じて[名前を付けて保存]ダイアログ、およびデフォルトのアプリとしてExcel。100%良い。

Firefox:[名前を付けて保存]ダイアログは表示されますが、Firefoxはそれがスプレッドシートであることを認識していません。Visual Studioで開くことをお勧めします!50%良い

Chrome:ヒントは完全に無視されます。ブラウザにCSVデータが表示されます。良い0%。

もちろん、これらすべてのケースで、ブラウザがボックスから出てきたときに、mime /アプリケーションのマッピングをカスタマイズすることなく、ブラウザを指します。


FirefoxでVisual Studioを開いてほしい場合は、CSVではなくHTMLをエクスポートすることを意味します。
マーティン

これは2014年には当てはまらないようで、私にとってはすべてでうまくいきました。
MikeKulls 2014年

「上記のとおり」を定義してください
xhienne '16

2

「myfilename.cvs」の前に「/」文字を挿入することをお勧めします

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

より良い結果が得られることを願っています。


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.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.