2009-03-30 39 views
3

私はレスポンスにテキストファイル(CSV)をストリーミングしようとしていますが、次のコードはFirefox 3で完全に機能しますが、IEを使用すると実際の.aspxページをダウンロードしたいと思うようですファイルの内容がファイル拡張子またはタイプと一致しません。とにかくファイルをダウンロードすると、CSVデータが正しくダウンロードされ、Excelで開きます。私は間違って何をしていますか?Content-DispositionヘッダーがInternet Explorer 8で動作しないのはなぜですか?

DataTable dt = ExtensionsProvider.ListPrivateCallCostsForCsv(reportFilter.BusinessUnit, reportFilter.StartDate, 
                  reportFilter.EndDate); 
    Response.Clear(); 
    Response.Buffer = true; 
    Response.ContentType = "text/csv"; 
    Response.AddHeader("Content-Disposition", "filename=" + GetExportFileName()); 
    DataTableHelper.WriteCsv(dt, Response.Output, false); 
    Response.End(); 

答えて

9
Response.AddHeader("Content-Disposition", "filename=" + GetExportFileName()); 

は次のようになります。

Response.AddHeader("Content-Disposition", "attachment;filename=" + GetExportFileName()); 

メインContent-Disposition値がなければ、IEだけでURLの末尾の部分を使用します - something.aspx - ファイル名として。

(上記GetExportFileName()はほとんど句読点を剥奪消毒ファイル名を返す前提としてどのようなIEのようにトークンまたは引用符で囲まれた文字列ヘッダパラメータに行くことができますが、いくつかの不快感の問題です;。詳細についてはthis questionを参照)

+0

これはIE11では残念なことに動作しません –

-1

あなたはfilenameパラメータに加えて、Content-Dispositionヘッダの値を与える必要があります。

あなたは、「添付ファイル」の値よりmore luck with the "inline" valueを持っていることがあります。それは、どちらかのインラインでは動作しません

Response.AddHeader("Content-Disposition", "inline;filename=" + GetExportFileName()); 
0

。もちろん、他のすべてのブラウザで動作します

HttpServletResponse response = aCtx.getResponse(); 
response.setContentType("text/plain"); 
response.addHeader("Content-Disposition", "inline;filename=log.txt"); 
関連する問題