zoukankan      html  css  js  c++  java
  • asp.net中实现文件下载功能

    原文连接:https://www.cnblogs.com/gx1069/p/4492401.html

    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();
     
          }
     
     
    ------------------------------------------------------------------------------------------------------------
     
    Asp.net中文件上传下载的简单实现
     
     
    1. 文件下载
     
    在asp.net中,如果想点击某aspx的url实现文件下载只要在其Page_Load函数实现目标url的重定向即可。用下列代码即可实现。
     
    Response.Redirect("ff.zip");
     
    这种方法简便易行,但有一点小问题,就是当要下载的目标文件是浏览器可以打开的类型时,便会在浏览器中打开目标文件。
     
    如当目标文件名为"ff.txt"时,浏览器便会打开"ff.txt"文件,而不是我们想要的文件下载对话框,如何使得任何情况下都能直接下载呢?就需要如下几行代码来帮忙了。
     
    Response.ContentType = "application/octet-stream";
     
    Response.AddHeader("Content-Disposition", "attachment;FileName=" + HttpUtility.UrlEncode("文件名.txt"));
     
     
     
    //写入目标文件内容,以下三种方法都可以
     
    Response.WriteFile("ff.txt"); //此处也可以使用@"f:123.wma"类似的绝对路径(当然也需要相应的权限支持)
     
    //Response.Write("中文abc");
     
    //Response.BinaryWrite(Encoding.ASCII.GetBytes("hello world"));  
     
    这两种办法非常有效,但都存在一个问题,那就是断点续传。关于这个问题,感兴趣的朋友可以参看我的下一篇blog。
  • 相关阅读:
    C++ generic tools -- from C++ Standard Library
    18 12 18 给服务器添加logging 日志功能
    18 12 14 python提高 装饰器
    18 12 `12 WSGI 协议
    18 12 07 MySQL 与python 的交互
    转 SQL 的数据库 架构规范 之 58到家数据库30条军规解读
    18 12 06 sql 的 基本语句 查询 条件查询 逻辑运算符 模糊查询 范围查询 排序 聚合函数 分组 分页 连接查询 自关联 子查询
    18 12 4 SQL 的基本 语法
    clion 的 安装 变量配置的 搬运工(有点基础应该能看 大家看不懂 就是我自己看 哈哈哈哈哈哈)
    18 11 27 高级的服务器连接 epoll
  • 原文地址:https://www.cnblogs.com/sunny3158/p/15304518.html
Copyright © 2011-2022 走看看