zoukankan      html  css  js  c++  java
  • 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=z.zip");
            
    string filename = Server.MapPath("DownLoad/aaa.zip");
             Response.TransmitFile(filename);
         }

        
    //WriteFile实现下载
        protected void Button2_Click(object sender, EventArgs e)
         {
            
    /*
              using System.IO;
             
             
    */

            
    string fileName ="aaa.zip";//客户端保存的文件名
            string filePath=Server.MapPath("DownLoad/aaa.zip");//路径

             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 = "aaa.zip";//客户端保存的文件名
            string filePath = Server.MapPath("DownLoad/aaa.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 = "aaa.zip";//客户端保存的文件名
            string filePath = Server.MapPath("DownLoad/aaa.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();

         }
  • 相关阅读:
    nodeJS入门01-http模块
    nodeJS入门-Buffer对象
    php与MySQL(php内置mysql函数)
    php与MySQL(基本操作)
    log4net
    js验证小数类型(浮点数)和整数类型
    牛腩学ASP.NET CORE做博客视频
    opencv再学习之路(八)---设定感兴趣区域(RIO)
    opencv再学习之路(四)---色彩分割得到二值图像
    opencv再学习之路(三)---形态学操作
  • 原文地址:https://www.cnblogs.com/zhangzhifeng/p/3663606.html
Copyright © 2011-2022 走看看