ASP.NET中實現文件下載功能

    //TransmitFile實現下載
    protected void Button1_Click(object sender, EventArgs e)
     {
        
/*微軟爲Response對象提供了一個新的方法TransmitFile來解決使用Response.BinaryWrite
       下載超過400mb的文件時致使Aspnet_wp.exe進程回收而沒法成功下載的問題。代碼以下: 
*/

       Response.ContentType 
= "application/x-zip-compressed";
       Response.AddHeader(
"Content-Disposition", "attachment;filename=admin.exe");
       
string filename = Server.MapPath("~/signserver/fileupload/admin.exe");
       Response.TransmitFile(filename);
     }

    
//WriteFile實現下載
    protected void Button2_Click(object sender, EventArgs e)
     {
        
/*using System.IO;*/

        
string fileName ="admin.exe";//客戶端保存的文件名
        string filePath=Server.MapPath("~/signserver/fileupload/admin.exe");//路徑

        FileInfo fileInfo 
= new FileInfo(filePath);
        Response.Clear();
        Response.ClearContent();
        Response.ClearHeaders();
        Response.AddHeader(
"Content-Disposition", "attachment;filename=" + fileName);
        Response.AddHeader(
"Content-Length", fileInfo.Length.ToString());
        Response.AddHeader(
"Content-Transfer-Encoding", "binary");
        Response.ContentType 
= "application/octet-stream";
        Response.ContentEncoding 
= System.Text.Encoding.GetEncoding("gb2312");
        Response.WriteFile(fileInfo.FullName);
        Response.Flush();
        Response.End();
     }

    
//WriteFile分塊下載
    protected void Button3_Click(object sender, EventArgs e)
     {
        /*using System.IO;*/

        
string fileName = "admin.exe";//客戶端保存的文件名
        string filePath = Server.MapPath("~/signserver/fileupload/admin.exe");//路徑

        FileInfo fileInfo 
= new FileInfo(filePath);

        
if (fileInfo.Exists == true)
         {
            
const long ChunkSize = 102400;//100K 每次讀取文件,只讀取100K,這樣能夠緩解服務器的壓力
            byte[] buffer = new byte[ChunkSize];

            Response.Clear();
            FileStream iStream 
= File.OpenRead(filePath);
            
long dataLengthToRead = iStream.Length;//獲取下載的文件總大小
            Response.ContentType = "application/octet-stream";
            Response.AddHeader(
"Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName));
            
while (dataLengthToRead > 0 && Response.IsClientConnected)
             {
                
int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//讀取的大小
                 Response.OutputStream.Write(buffer, 0, lengthRead);
                 Response.Flush();
                 dataLengthToRead 
= dataLengthToRead - lengthRead;
             }
             Response.Close();
         }
     }

    
//流方式下載
    protected void Button4_Click(object sender, EventArgs e)
     {
web

        /*using System.IO;*/

        
string fileName = "admin.exe";//客戶端保存的文件名
        string filePath = Server.MapPath("~/signserver/fileupload/admin.exe");//路徑

        
//以字符流的形式下載文件
        FileStream fs = new FileStream(filePath, FileMode.Open);
        
byte[] bytes = new byte[(int)fs.Length];
        fs.Read(bytes, 
0, bytes.Length);
        fs.Close();
        Response.ContentType 
= "application/octet-stream";
        
//通知瀏覽器下載文件而不是打開
        Response.AddHeader("Content-Disposition", "attachment;   filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
        Response.BinaryWrite(bytes);
        Response.Flush();
        Response.End();

     }
瀏覽器

相關文章
相關標籤/搜索