3 Stimmen

Warum funktioniert der Content-Disposition-Header nicht in IE 8?

Ich versuche, eine Textdatei (CSV) an die Antwort zu streamen, und der folgende Code funktioniert perfekt in Firefox 3, aber wenn ich IE benutze, scheint es, dass es die tatsächliche .aspx-Seite herunterladen möchte und sich beschwert, dass der Dateiinhalt nicht mit der Dateierweiterung oder dem Dateityp übereinstimmt. Wenn ich dann trotzdem die Datei herunterladen wähle, lädt sie die CSV-Daten korrekt herunter und öffnet sie in Excel. Was mache ich falsch?

    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();

9voto

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

Sollte sein:

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

Ohne einen Hauptwert von Content-Disposition wird der IE einfach den Endteil der URL verwenden - something.aspx - als Dateiname.

(Das obige geht davon aus, dass GetExportFileName() einen bereinigten Dateinamen zurückgibt, der von den meisten Satzzeichen befreit ist. Was in IE als Token oder Quoted-String in einem Header-Parameter eingegeben werden kann, ist eine Frage einiger Ärgernisse; siehe diese Frage für Details)

0voto

Alberto Godar Punkte 249

Es funktioniert auch nicht inline. Natürlich funktioniert es für alle anderen Browser

HttpServletResponse response = aCtx.getResponse();
response.setContentType("text/plain");
response.addHeader("Content-Disposition", "inline;filename=log.txt");

-1voto

brianary Punkte 8554

Sie müssen den Wert für den Content-Disposition-Header angeben, zusätzlich zum Dateiname-Parameter.

Sie haben möglicherweise mehr Glück mit dem Wert "inline" als mit dem Wert "attachment":

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X