• asp.net 文件下载方式(转)


    1.   protected void Button1_Click(object sender, EventArgs e)   
    2.     {   
    3.         /*   
    4.         微软为Response对象提供了一个新的方法TransmitFile来解决使用Response.BinaryWrite   
    5.         下载超过400mb的文件时导致Aspnet_wp.exe进程回收而无法成功下载的问题。   
    6.         代码如下:   
    7.         */    
    8.         Response.ContentType = "application/x-zip-compressed";   
    9.         Response.AddHeader("Content-Disposition", "attachment;filename=z.zip");   
    10.         string filename = Server.MapPath("DownLoad/z.zip");   
    11.         Response.TransmitFile(filename);   
    12.     }   
    13.   
    14.     //WriteFile实现下载    
    15.     protected void Button2_Click(object sender, EventArgs e)   
    16.     {   
    17.         /*   
    18.         using System.IO;  
    19.  
    20.         */  
    21.         string fileName = "asd.txt";//客户端保存的文件名    
    22.         string filePath = Server.MapPath("DownLoad/aaa.txt");//路径   
    23.   
    24.         FileInfo fileInfo = new FileInfo(filePath);   
    25.         Response.Clear();   
    26.         Response.ClearContent();   
    27.         Response.ClearHeaders();   
    28.         Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);   
    29.         Response.AddHeader("Content-Length", fileInfo.Length.ToString());   
    30.         Response.AddHeader("Content-Transfer-Encoding", "binary");   
    31.         Response.ContentType = "application/octet-stream";   
    32.         Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");   
    33.         Response.WriteFile(fileInfo.FullName);   
    34.         Response.Flush();   
    35.         Response.End();   
    36.     }   
    37.   
    38.     //WriteFile分块下载    
    39.     protected void Button3_Click(object sender, EventArgs e)   
    40.     {   
    41.         string fileName = "aaa.txt";//客户端保存的文件名    
    42.         string filePath = Server.MapPath("DownLoad/aaa.txt");//路径   
    43.   
    44.         System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath);   
    45.   
    46.         if (fileInfo.Exists == true)   
    47.         {   
    48.             const long ChunkSize = 102400;//100K 每次读取文件,只读取100K,这样可以缓解服务器的压力    
    49.             byte[] buffer = new byte[ChunkSize];   
    50.   
    51.             Response.Clear();   
    52.             System.IO.FileStream iStream = System.IO.File.OpenRead(filePath);   
    53.             long dataLengthToRead = iStream.Length;//获取下载的文件总大小    
    54.             Response.ContentType = "application/octet-stream";   
    55.             Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName));   
    56.             while (dataLengthToRead > 0 && Response.IsClientConnected)   
    57.             {   
    58.                 int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//读取的大小    
    59.                 Response.OutputStream.Write(buffer, 0, lengthRead);   
    60.                 Response.Flush();   
    61.                 dataLengthToRead = dataLengthToRead - lengthRead;   
    62.             }   
    63.             Response.Close();   
    64.         }   
    65.     }   
    66.   
    67.     //流方式下载    
    68.     protected void Button4_Click(object sender, EventArgs e)   
    69.     {   
    70.         string fileName = "aaa.txt";//客户端保存的文件名    
    71.         string filePath = Server.MapPath("DownLoad/aaa.txt");//路径   
    72.   
    73.         //以字符流的形式下载文件    
    74.         FileStream fs = new FileStream(filePath, FileMode.Open);   
    75.         byte[] bytes = new byte[(int)fs.Length];   
    76.         fs.Read(bytes, 0, bytes.Length);   
    77.         fs.Close();   
    78.         Response.ContentType = "application/octet-stream";   
    79.         //通知浏览器下载文件而不是打开    
    80.         Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));   
    81.         Response.BinaryWrite(bytes);   
    82.         Response.Flush();   
    83.         Response.End();   
    84.     }   
    85.   
    86.     
    87.   
    88. //----------------------------------------------------------   
    89.   
    90.     
    91.   
    92.     
    93.   
    94. public void DownloadFile( System.Web.UI.Page WebForm,String FileNameWhenUserDownload ,String FileBody )   
    95. {   
    96.   
    97.   WebForm.Response.ClearHeaders();   
    98.   WebForm.Response.Clear();   
    99.   WebForm.Response.Expires = 0;   
    100.   WebForm.Response.Buffer = true;   
    101.   WebForm.Response.AddHeader("Accept-Language", "zh-tw");   
    102.   //'文件名称   
    103.   WebForm.Response.AddHeader("content-disposition", "attachment; filename='"+System.Web.HttpUtility.UrlEncode(FileNameWhenUserDownload, System.Text.Encoding.UTF8)+"'");   
    104.   WebForm.Response.ContentType = "Application/octet-stream";   
    105.   //'文件内容   
    106.   WebForm.Response.Write(FileBody);//-----------   
    107.     WebForm.Response.End();   
    108. }   
    109.   
    110.   
    111. //上面这段代码是下载一个动态产生的文本文件,若这个文件已经存在于服务器端的实体路径,则可以通过下面的函数:   
    112.   
    113. public void DownloadFileByFilePath( System.Web.UI.Page WebForm,String FileNameWhenUserDownload ,String FilePath )   
    114. {   
    115.   WebForm.Response.ClearHeaders();   
    116.   WebForm.Response.Clear();   
    117.   WebForm.Response.Expires = 0;   
    118.     WebForm.Response.Buffer = true;   
    119.   WebForm.Response.AddHeader("Accept-Language", "zh-tw");   
    120.   //文件名称   
    121.   WebForm.Response.AddHeader("content-disposition", "attachment; filename='" + System.Web.HttpUtility.UrlEncode(FileNameWhenUserDownload, System.Text.Encoding.UTF8) +"'" );   
    122.   WebForm.Response.ContentType = "Application/octet-stream";   
    123.   //文件内容   
    124.   WebForm.Response.Write(System.IO.File.ReadAllBytes(FilePath));//---------   
    125.   WebForm.Response.End();   
  • 相关阅读:
    poj3041——最小点覆盖
    高斯消元
    hdu1704——floyd
    poj2594——最小路径覆盖
    POJ3020 二分图匹配——最小路径覆盖
    我的老博客
    [ZJOI2015]幻想乡战略游戏 动态点分治
    HDU 5737 Differencia set + 主席树
    HDU
    HDU
  • 原文地址:https://www.cnblogs.com/Olimpic2008/p/11390695.html
Copyright © 2020-2023  润新知