C# Response 下载

时间:2021-09-11 08:26:45

//TransmitFile实现下载 

    protected void Button1_Click(object sender, EventArgs e) 

    { 

        /*

         微软为Response东西供给了一个新的要领TransmitFile来解决使用Response.BinaryWrite

         下载赶过400mb的文件时导致Aspnet_wp.exe进程回收而无法告成下载的问题。

         代码如下:

         */ 

   

        Response.ContentType = "application/x-zip-compressed"; 

        string FileName = "test.doc"; 

        //使用UTF-8对文件名进行编码 

        Response.AppendHeader("Content-Disposition", "attachment;filename=\"" + HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8) + "\""); 

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

        Response.AddHeader("Content-Disposition", "attachment;filename=" + FileName); 

        string filename = Server.MapPath("../ReportTemplate/test.doc"); 

        Response.TransmitFile(filename); 

    } 

   

    //WriteFile实现下载 

    protected void Button2_Click(object sender, EventArgs e) 

    { 

         /*

         using System.IO;         

         */ 

        string fileName = "test.doc";//客户端生存的文件名 

        string filePath = Server.MapPath("../ReportTemplate/test.doc");//路径 

        FileInfo fileInfo = new FileInfo(filePath); 

        Response.Clear(); 

        Response.ClearContent(); 

        Response.ClearHeaders(); 

        Response.AddHeader("Content-Disposition", "attachment;filename=\"" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8) + "\""); 

        Response.AddHeader("Content-Length", fileInfo.Length.ToString()); 

        Response.AddHeader("Content-Transfer-Encoding", "binary"); 

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

        Response.WriteFile(fileInfo.FullName); 

        Response.Flush(); 

        Response.End(); 

    } 

   

    //WriteFile分块下载 

    protected void Button3_Click(object sender, EventArgs e) 

    { 

        string fileName = "test.doc";//客户端生存的文件名 

        string filePath = Server.MapPath("../ReportTemplate/test.doc");//路径 

   

   

        System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath); 

   

   

        if (fileInfo.Exists == true) 

        { 

            const long ChunkSize = 102400; //100K 每次读取文件,只读取100K,,这样可以缓解处事器的压力 

            byte[] buffer = new byte[ChunkSize]; 

   

   

            Response.Clear(); 

            System.IO.FileStream iStream = System.IO.File.OpenRead(filePath); 

            long dataLengthToRead = iStream.Length; //获取下载的文件总巨细 

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

            Response.AddHeader("Content-Disposition", 

                "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8)); 

            while (dataLengthToRead > 0 && Response.IsClientConnected) 

            {