Come implementare il download di un file in asp.net
Domanda
Qual è il modo migliore per implementare, da una pagina web, un'azione di download utilizzando asp.net 2.0?
I file di registro per un'azione vengono creati in una directory denominata [Application Root]/Logs.Ho il percorso completo e desidero fornire un pulsante che, se cliccato, scaricherà il file di registro dal server IIS al PC locale dell'utente.
Soluzione
Questo aiuta:
http://www.west-wind.com/weblog/posts/76293.aspx
Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-Disposition","attachment; filename=logfile.txt");
Response.TransmitFile( Server.MapPath("~/logfile.txt") );
Response.End();
Response.TransmitFile è il modo accettato per inviare file di grandi dimensioni, anziché Response.WriteFile.
Altri suggerimenti
http://forums.asp.net/p/1481083/3457332.aspx
string filename = @"Specify the file path in the server over here....";
FileInfo fileInfo = new FileInfo(filename);
if (fileInfo.Exists)
{
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=" + fileInfo.Name);
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.Flush();
Response.TransmitFile(fileInfo.FullName);
Response.End();
}
Aggiornamento:
Il codice iniziale
Response.AddHeader("Content-Disposition", "inline;attachment; filename=" + fileInfo.Name);
ha "inline;attachment" cioèdue valori per Disposizione contenuto.
Non so quando sia iniziato esattamente, ma in Firefox soltanto il nome file corretto non veniva visualizzato.Viene visualizzata la casella di download del file con il nome della pagina Web e la sua estensione (nomepagina.aspx).Dopo il download, se lo rinomini con il nome effettivo;il file si apre correttamente.
Come da questa pagina, funziona Primo arrivato, primo servito.Modificando il valore in attachment
ha solo risolto il problema.
PS:Non sono sicuro che questa sia la procedura migliore, ma il problema è stato risolto.