Dateinamen für dynamisches PDF in asp.net Angeben
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.
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 & ";")