web-dev-qa-db-ja.com

CSVとしてのレスポンスコンテンツタイプ

HTTP応答でCSVファイルを送信する必要があります。出力応答をCSV形式に設定する方法を教えてください。

これはうまくいきません。

Response.ContentType = "application/CSV";
305
balaweblog

text/csvを使用するのが最も適切なタイプです。

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

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

上記のようにすると、「名前を付けて保存」ダイアログが表示されますが、これは意図したとおりです。

459
AnthonyWJones

CSVのMIMEタイプは RFC 418 によるとtext/csvです。

131
sastanin

コンテンツタイプとしてtext/csvを使用してください。

52
ibz

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

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

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

  • テキスト/カンマ区切り値
  • text/csv
  • application/csv
  • アプリケーション/ Excel
  • application/vnd.ms-Excel
  • application/vnd.msexcel

また、mime-typeでは、大文字と小文字が区別される可能性があります。

23
diclophis

そのように使うだけ

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

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

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

IEの問題は、戻りデータを傍受し、送信されたコンテンツタイプを判断することです。データ転送の圧縮を使用しているためにテキストファイル用のsaveAsダイアログを常に開くなど、これが原因となる副作用が多数あります。解決策は(PHPコードで)......です。

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

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

IE8:必要に応じてSaveAsダイアログ、デフォルトのアプリケーションとしてExcel。 100%良い.

Firefox:SaveAsダイアログは表示されますが、Firefoxはスプレッドシートであることを知りません。 Visual Studioで開くことをお勧めします。 50%良い

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

もちろん、これらすべてのケースで、私はブラウザが箱から出てくるときに言及していますが、MIME /アプリケーションマッピングのカスタマイズはしていません。

2
David Sklar

Myfilename.cvsの前に/を挿入することをお勧めします。

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

もっと良い結果が得られるといいのですが。

2
Jaider

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.
0
Suresh Kamrushi