• .net几种文件下载的方法


    .Net文件下载方式。。。。

      之前在写上传文件、下载文件的时候,发现Response对象里面有好几种下载文件的方式,之后自己亲自实践了这几种方法,记录下以便以后复习。。。

     WriteFile文件下载

     1      public void getFile(string path, string fileName)
     2         {
     3             FileInfo fileInfo = new FileInfo(path);
     4             Response.Clear();
     5             Response.ClearContent();
     6             Response.ClearHeaders();
     7             Response.ContentType = "application/octet-stream";//设置输出流的 HTTP MIME 类型
     8             //Content-Disposition 为二进制格式提供已知MIME类型的“文件下载”对话框或建议动态内容的文件名的机会
     9             Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));// URL 字符串进行编码,防止出现乱码
    10             //回应消息体的长度,以 字节 (8位为一字节)为单位
    11             Response.AddHeader("Content-Length", fileInfo.Length + "");
    12             //文件传输编码  二进制
    13             Response.AddHeader("Content-Transfer-Encoding", "binary");
    14             //指定文件的内容作为文件块直接写入 HTTP 响应输出流
    15             Response.WriteFile(fileInfo.FullName);
    16             Response.Flush();
    17             Response.End();        
    18         }

     BinaryWrite流文件下载

     1     public void getFile1(string path, string fileName)
     2         {
     3             FileStream stream = File.Open(path, FileMode.Open); // FileStream stream = new FileStream(path,FileMode.Open);  
     4             byte[] buffer = new byte[(int)stream.Length];
     5             stream.Read(buffer, 0, buffer.Length);
     6             stream.Close();//文件流需要手动关闭,或者用using自动关闭
     7             Response.Clear();
     8             Response.ContentType = "application/octet-stream";
     9             //通知浏览器下载    
    10             Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
    11             //将二进制字符串写入 HTTP 输出流,已经是二进制了,就不需要 Response.AddHeader("Content-Transfer-Encoding", "binary");
    12             Response.BinaryWrite(buffer);
    13             Response.Flush();
    14             Response.End();
    15         }

    大文件分块下載

     1  public void getFile2(string path, string fileName)
     2         {
     3             FileInfo fileInfo = new FileInfo(path);
     4             if (fileInfo.Exists)
     5             {
     6                 const long standardSize = 200*1024;//定义一个静态常量,每次读取200K,缓解服务器压力(大文件更好下载)
     7                 FileStream stream = File.OpenRead(path);
     8                 byte[] buffer = new byte[standardSize];
     9                 long dataFielSize = stream.Length;//下载文件总大小 
    10                 Response.Clear();
    11                 Response.ContentType = "application/octet-stream";
    12                 Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName));
    13                 Response.AddHeader("Content-Length", fileInfo.Length.ToString());
    14                 Response.AddHeader("Content-Transfer-Encoding", "binary");
    15                 Response.ContentEncoding = System.Text.Encoding.Default;
    16                 if (dataFielSize > 0 && Response.IsClientConnected)
    17                 {
    18                     int readLengtn = stream.Read(buffer, 0, (int)standardSize);
    19                     Response.OutputStream.Write(buffer, 0, readLengtn);
    20                     Response.Flush();
    21                     dataFielSize = dataFielSize - readLengtn;
    22                 }
    23                 stream.Close();
    24                 Response.Close();
    25             }
    26         }

    TransmitFile文件下载

    1    public void getFile4(string path, string fileName)
    2         {
    3             Response.Clear();
    4             Response.ContentType = "application/octet-stream";
    5             Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName));
    6             Response.TransmitFile(path);
    7         }

     JSWindow打开文件 

    1    public void getFile3(string path)
    2         {
    3             Response.Write("<script>window.open('" + path + "')</script>");//文件打开可以下载,图片打开就是在线预览
    4         }

    方法调用函数如下:

     1   protected void btnn_Click(object sender, EventArgs e)
     2         {
     3             Button btn = (Button)sender;
     4             //var aa = Request.MapPath("../Pages/uploadfiles");//Request对象获取绝对路径
     5             var filesArr = Directory.GetFiles(Server.MapPath("../Pages/uploadfiles"));//Server对象获取绝对路径
     6             var tempArr = filesArr[1].Split('\');
     7             var jsdownLoadUrl = "../Pages/uploadfiles/" + tempArr[tempArr.Length - 1];
     8             var fileName = "图片下载";
     9             switch (btn.ID)
    10             {
    11                 case "btn1":
    12                     getFile(filesArr[0], fileName);
    13                     break;
    14                 case "btn2":
    15                     getFile1(filesArr[0], fileName);
    16                     break;
    17                 case "btn3":
    18                     getFile2(filesArr[0], fileName);
    19                     break;
    20                 case "btn4":
    21                     getFile3(jsdownLoadUrl);
    22                     break;
    23                 case "btn5":
    24                     getFile4(filesArr[0], fileName);
    25                     break;
    26                 default:
    27                     break;
    28             }
    29 
    30         }
  • 相关阅读:
    练习JSON
    实现JSON+JDBC的简单操作(以显示对象为例)
    三层架构:表示层-业务逻辑层-数据访问层
    实现json的三个操作(训练JSON)
    实现邮箱验证 简化版
    复习注册表单html和jQuery
    监听器(测试在线人数的)第一种 HttpSessionBindingListener
    Django的中间件
    Django form表单
    Django
  • 原文地址:https://www.cnblogs.com/huage-1234/p/7346396.html
Copyright © 2020-2023  润新知