Specifica del nome file per PDF dinamico in asp.net
Domanda
Come posso specificare il nome del file quando scarico i dati nel flusso di risposta?
In questo momento sto facendo quanto segue:
byte[] data= GetFoo();
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/pdf";
Response.BinaryWrite(data);
Response.End();
Con il codice sopra, ottengo "foo.aspx.pdf" come nome del file da salvare.Mi sembra di ricordare di essere in grado di aggiungere un'intestazione alla risposta per specificare il nome del file da salvare.
Soluzione
Aggiungi una disposizione del contenuto all'intestazione:
Response.AddHeader("content-disposition", @"attachment;filename=""MyFile.pdf""");
Altri suggerimenti
PER TUA INFORMAZIONE...se usi "inline" invece di "allegato" il file si aprirà automaticamente in IE.Invece di richiedere all'utente una finestra di dialogo Apri/Salva.
Response.AppendHeader("content-disposition", string.Format("inline;FileName=\"{0}\"", fileName));
Response.AppendHeader("Content-Disposition", "attachment; filename=foo.pdf");
Per qualche ragione, la maggior parte delle risposte disponibili non sembra nemmeno tentare di codificare il valore del nome file.Se il file contiene spazi, punti e virgola o virgolette, potrebbe non essere visualizzato correttamente.
Sembra che tu possa usare il file ContentDisposition
class per generare un valore di intestazione corretto:
Response.AppendHeader("Content-Disposition", new ContentDisposition
{
FileName = yourFilename
}.ToString());
Puoi controllare il codice sorgente per ContentDisposition.ToString()
per confermare che sta tentando di codificarlo correttamente.
Avvertimento:Sembra che si blocchi quando il nome del file contiene un trattino (non un trattino).Non mi sono ancora preso la briga di esaminarlo.
Response.AddHeader("Content-Disposition", "attachment;filename=" & FileName & ";")