2013-09-29 139 views
2
public void Downloadfile(string sFileName, string sFilePath) 
{ 
    HttpContext.Current.Response.Clear(); 
    HttpContext.Current.Response.ClearContent(); 
    HttpContext.Current.Response.ClearHeaders(); 
    HttpContext.Current.Response.ContentType = "APPLICATION/OCTET-STREAM"; 
    String Header = "Attachment; Filename=" + sFileName; 
    HttpContext.Current.Response.AppendHeader("Content-Disposition", Header); 
    HttpContext.Current.Response.AppendHeader("Cache-Control", "no-cache"); 
    System.IO.FileInfo Dfile = new System.IO.FileInfo(HttpContext.Current.Server.MapPath(sFilePath)); 
    HttpContext.Current.Response.TransmitFile(Dfile.FullName); 
    HttpContext.Current.ApplicationInstance.CompleteRequest(); 
} 

使用HttpContext.Current.Response.TransmitFile我有一個下載按鈕,點擊會回電話,並下載相應的文件下載,但有時文件的回報是detailt.aspx文件。我不明白髮生了什麼事。 我需要幫助。非常感謝ASP.net下載文件在ASP.NET

回答

6

這對我來說已經適用了一段時間了。

public void Downloadfile(string sFileName, string sFilePath) 
{ 
    var file = new System.IO.FileInfo(sFilePath); 

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

感謝David Negron的回覆。 但是,當我使用Response.End(),thorw異常: exception = {無法評估表達式,因爲代碼已優化或本機框架位於調用堆棧之上。} 我不理解錯誤。你可以解釋嗎。 – user2828601

+0

在調用下載文件後,您有可能嘗試執行任何其他代碼。我問的原因是我通常從HttpHandler中調用這種類型的代碼。對於這個例子來看看這篇文章http://geekswithblogs.net/hmloo/archive/2012/03/07/how-to-download-files-using-a-generic-handler.aspx –