Download di file ASP.NET dal server

Dopo che un utente fa clic su un pulsante, voglio che un file sia scaricato. Ho provato quanto segue che sembra funzionare, ma non senza lanciare un’eccezione (ThreadAbort) che non è accettabile.

System.Web.HttpResponse response = System.Web.HttpContext.Current.Response; response.ClearContent(); response.Clear(); response.ContentType = "text/plain"; response.AddHeader("Content-Disposition", "attachment; filename=" + fileName + ";"); response.TransmitFile(Server.MapPath("FileDownload.csv")); response.Flush(); response.End(); 

È ansible utilizzare un gestore HTTP (.ashx) per scaricare un file, come questo:

DownloadFile.ashx:

 public class DownloadFile : IHttpHandler { public void ProcessRequest(HttpContext context) { System.Web.HttpResponse response = System.Web.HttpContext.Current.Response; response.ClearContent(); response.Clear(); response.ContentType = "text/plain"; response.AddHeader("Content-Disposition", "attachment; filename=" + fileName + ";"); response.TransmitFile(Server.MapPath("FileDownload.csv")); response.Flush(); response.End(); } public bool IsReusable { get { return false; } } } 

Quindi puoi chiamare il gestore HTTP dal gestore di eventi click del pulsante, in questo modo:

markup:

  

Codice sottostante:

 protected void btnDownload_Click(object sender, EventArgs e) { Response.Redirect("PathToHttpHandler/DownloadFile.ashx"); } 

Passare un parametro al gestore HTTP:

Puoi semplicemente aggiungere una variabile stringa di query a Response.Redirect() , in questo modo:

 Response.Redirect("PathToHttpHandler/DownloadFile.ashx?yourVariable=yourValue"); 

Quindi nel codice del gestore reale è ansible utilizzare l’object Request in HttpContext per acquisire il valore della variabile della stringa di query, in questo modo:

 System.Web.HttpRequest request = System.Web.HttpContext.Current.Request; string yourVariableValue = request.QueryString["yourVariable"]; // Use the yourVariableValue here 

Nota : è comune passare un nome file come parametro della stringa di query per suggerire all’utente il reale significato del file, nel qual caso possono sovrascrivere il valore del nome con Salva come …

Prova questo set di codice per scaricare un file CSV dal server.

 byte[] Content= File.ReadAllBytes(FilePath); //missing ; Response.ContentType = "text/csv"; Response.AddHeader("content-disposition", "attachment; filename=" + fileName + ".csv"); Response.BufferOutput = true; Response.OutputStream.Write(Content, 0, Content.Length); Response.End(); 

Apportare le modifiche come di seguito e ridistribuire sul tipo di contenuto del server come

 Response.ContentType = "application/octet-stream"; 

Questo ha funzionato per me.

 Response.Clear(); Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name); Response.AddHeader("Content-Length", file.Length.ToString()); Response.ContentType = "application/octet-stream"; Response.WriteFile(file.FullName); Response.End(); 

Oltre alla soluzione di Karl Anderson, è ansible inserire i parametri nelle informazioni di sessione e quindi cancellarli dopo la response.TransmitFile(Server.MapPath( Session(currentSessionItemName))); .

Vedere la pagina MSDN HttpSessionState.Add Method (String, Object) per ulteriori informazioni sulle sessioni.

 protected void DescargarArchivo(string strRuta, string strFile) { FileInfo ObjArchivo = new System.IO.FileInfo(strRuta); Response.Clear(); Response.AddHeader("Content-Disposition", "attachment; filename=" + strFile); Response.AddHeader("Content-Length", ObjArchivo.Length.ToString()); Response.ContentType = "application/pdf"; Response.WriteFile(ObjArchivo.FullName); Response.End(); } 

Soluzione semplice per scaricare un file dal server:

 protected void btnDownload_Click(object sender, EventArgs e) { string FileName = "Durgesh.jpg"; // It's a file name displayed on downloaded file on client side. System.Web.HttpResponse response = System.Web.HttpContext.Current.Response; response.ClearContent(); response.Clear(); response.ContentType = "image/jpeg"; response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + ";"); response.TransmitFile(Server.MapPath("~/File/001.jpg")); response.Flush(); response.End(); }