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.

È stato utile?

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 & ";")
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top