Frage

Wie kann ich die Dateinamen angeben, wenn Daten in das Antwortstream Dumping?

Im Moment mache ich folgendes:

byte[] data= GetFoo();
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/pdf";            
Response.BinaryWrite(data);
Response.End();

Mit dem obigen Code, erhalte ich „foo.aspx.pdf“ als Dateinamen zu speichern. Ich glaube mich zu erinnern, einen Header der Antwort in der Lage, fügen Sie den Dateinamen angeben zu speichern.

War es hilfreich?

Lösung

Fügen Sie eine Content-Disposition zu der Kopfzeile:

Response.AddHeader("content-disposition", @"attachment;filename=""MyFile.pdf""");

Andere Tipps

Zu Ihrer Information ..., wenn Sie „inline“ statt „attachment“ die Datei öffnet sich automatisch im Internet Explorer verwenden wird. Statt dem Anwender ein Öffnen / Speichern Dialog auffordert.

Response.AppendHeader("content-disposition", string.Format("inline;FileName=\"{0}\"", fileName));
Response.AppendHeader("Content-Disposition", "attachment; filename=foo.pdf");

Aus irgendeinem Grund die meisten Antworten da draußen scheinen nicht einmal zu versuchen, den Dateinamen Wert zu kodieren. Wenn die Dateibereiche, Semikolons oder Anführungszeichen enthält, kann es nicht richtig wirken.

Es sieht aus wie Sie die ContentDisposition Klasse generieren einen richtigen Header-Wert:

Response.AppendHeader("Content-Disposition", new ContentDisposition
{
    FileName = yourFilename
}.ToString());

Sie können überprüfen den Quellcode ContentDisposition.ToString() zu bestätigen, dass es versucht, es richtig zu kodieren.

Warnung : Dies scheint zum Absturz zu bringen, wenn der Dateiname einen Bindestrich enthält (keinen Bindestrich). Ich habe noch nicht in diesem suchen gestört.

 Response.AddHeader("Content-Disposition", "attachment;filename=" & FileName & ";")
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top