zoukankan      html  css  js  c++  java
  • ASP.NET实现文件下载

    方式一:TransmitFile实现下载。将指定的文件直接写入 HTTP 响应输出流,而不在内存中缓冲该文件。

         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=CodeShark.zip "
    );
             
    string filename = Server.MapPath( " DownLoad/CodeShark.zip "
    );
              Response.TransmitFile(filename);
          }

    方式二: WriteFile实现下载,将指定的文件直接写入 HTTP 响应输出流。注意:对大型文件使用此方法时,调用此方法可能导致异常。可以使用此方法的文件大小取决于 Web 服务器的硬件配置。

         protected void Button2_Click( object sender, EventArgs e)
        
    ...
    {
            
    string fileName = " CodeShark.zip " ; // 客户端保存的文件名

         string filePath = Server.MapPath( " DownLoad/CodeShark.doc " ); // 路径
         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)
        
    ... {
            
    string fileName = " CodeShark.zip " ; // 客户端保存的文件名
         string filePath = Server.MapPath( " DownLoad/CodeShark.zip " ); // 路径
        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));
                
    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)
        
    ... {
            
    string fileName = " CodeShark.zip " ; // 客户端保存的文件名
         string filePath = Server.MapPath( " DownLoad/CodeShark.zip " ); // 路径
        
    // 以字符流的形式下载文件
         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();
         }
  • 相关阅读:
    qq
    qqq
    q
    .json文件
    q
    q
    q
    找jar包的网址
    1qq
    day18(JDBC事务&连接池介绍&DBUtils工具介绍&BaseServlet作用)
  • 原文地址:https://www.cnblogs.com/jishu/p/1940066.html
Copyright © 2011-2022 走看看