HTTP応答でCSVファイルを送信する必要があります。出力応答をCSV形式に設定する方法を教えてください。
これはうまくいきません。
Response.ContentType = "application/CSV";
text/csv
を使用するのが最も適切なタイプです。
また、応答にContent-Disposition
ヘッダーを追加することを検討する必要があります。多くの場合、text/csvは、ホストされているExcelのインスタンスにInternet Explorerによって直接ロードされます。これは望ましい結果ではないかもしれません。
Response.AddHeader("Content-Disposition", "attachment;filename=myfilename.csv");
上記のようにすると、「名前を付けて保存」ダイアログが表示されますが、これは意図したとおりです。
CSVのMIMEタイプは RFC 418 によると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 )
また、mime-typeでは、大文字と小文字が区別される可能性があります。
そのように使うだけ
Response.Clear();
Response.ContentType = "application/CSV";
Response.AddHeader("content-disposition", "attachment; filename=\"" + filename + ".csv\"");
Response.Write(t.ToString());
Response.End();
ASP.net MVCでは、FileContentResult
およびFile
メソッドを使用できます。
public FileContentResult DownloadManifest() {
byte[] csvData = getCsvData();
return File(csvData, "text/csv", "filename.csv");
}
IEの問題は、戻りデータを傍受し、送信されたコンテンツタイプを判断することです。データ転送の圧縮を使用しているためにテキストファイル用のsaveAsダイアログを常に開くなど、これが原因となる副作用が多数あります。解決策は(PHPコードで)......です。
header('X-Content-Type-Options: nosniff');
上記のようにコンテンツタイプとコンテンツの配置を設定すると、ブラウザによって結果が大きく異なります。
IE8:必要に応じてSaveAsダイアログ、デフォルトのアプリケーションとしてExcel。 100%良い.
Firefox:SaveAsダイアログは表示されますが、Firefoxはスプレッドシートであることを知りません。 Visual Studioで開くことをお勧めします。 50%良い
Chrome:ヒントは完全に無視されています。 CSVデータがブラウザに表示されます。 0%良い.
もちろん、これらすべてのケースで、私はブラウザが箱から出てくるときに言及していますが、MIME /アプリケーションマッピングのカスタマイズはしていません。
Myfilename.cvsの前に/を挿入することをお勧めします。
Response.AddHeader("Content-Disposition", "attachment;filename=/myfilename.csv");
もっと良い結果が得られるといいのですが。
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.