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

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

WriteFile文件下载

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

BinaryWrite流文件下载

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

大文件分块下載

  public void getFile2(string path, string fileName)
{
FileInfo fileInfo = new FileInfo(path);
if (fileInfo.Exists)
{
const long standardSize = *;//定义一个静态常量,每次读取200K,缓解服务器压力(大文件更好下载)
FileStream stream = File.OpenRead(path);
byte[] buffer = new byte[standardSize];
long dataFielSize = stream.Length;//下载文件总大小
Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName));
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
Response.AddHeader("Content-Transfer-Encoding", "binary");
Response.ContentEncoding = System.Text.Encoding.Default;
if (dataFielSize > && Response.IsClientConnected)
{
int readLengtn = stream.Read(buffer, , (int)standardSize);
Response.OutputStream.Write(buffer, , readLengtn);
Response.Flush();
dataFielSize = dataFielSize - readLengtn;
}
stream.Close();
Response.Close();
}
}

TransmitFile文件下载

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

JSWindow打开文件

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

方法调用函数如下:

   protected void btnn_Click(object sender, EventArgs e)
{
Button btn = (Button)sender;
//var aa = Request.MapPath("../Pages/uploadfiles");//Request对象获取绝对路径
var filesArr = Directory.GetFiles(Server.MapPath("../Pages/uploadfiles"));//Server对象获取绝对路径
var tempArr = filesArr[].Split('\\');
var jsdownLoadUrl = "../Pages/uploadfiles/" + tempArr[tempArr.Length - ];
var fileName = "图片下载";
switch (btn.ID)
{
case "btn1":
getFile(filesArr[], fileName);
break;
case "btn2":
getFile1(filesArr[], fileName);
break;
case "btn3":
getFile2(filesArr[], fileName);
break;
case "btn4":
getFile3(jsdownLoadUrl);
break;
case "btn5":
getFile4(filesArr[], fileName);
break;
default:
break;
} }

.net几种文件下载的方法的更多相关文章

  1. WordPress忘记密码找回登录密码的四种行之有效的方法

    WordPress忘记密码找回登录密码的四种行之有效的方法 PS:20170214更新,感谢SuperDoge同学提供的方法,登入phpMyAdmin后,先从左边选自己的数据库,然后点上面的 SQL ...

  2. .Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构)

    .Net MVC  导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) [原文地址] 通过MVC控制器导出导入Excel文件(可用于java SSH架构)   public cl ...

  3. .NET中常用的几种解析JSON方法

    一.基本概念 json是什么? JSON:JavaScript 对象表示法(JavaScript Object Notation). JSON 是一种轻量级的数据交换格式,是存储和交换文本信息的语法. ...

  4. IOS开发-几种截屏方法

    IOS开发-几种截屏方法 1.        UIGraphicsBeginImageContextWithOptions(pageView.page.bounds.size, YES, zoomSc ...

  5. C语言的几种取整方法

    C语言的几种取整方法 来源:http://blog.sina.com.cn/s/blog_4c0cb1c001013ha9.html 1.直接赋值给整数变量.如: int i = 2.5; 或 i = ...

  6. 24种设计模式--模版方法模式【Template Method Pattern】

    周三,9:00,我刚刚坐到位置,打开电脑准备开始干活.“小三,小三,叫一下其它同事,到会议室,开会”老大跑过来吼,带着淫笑.还不等大家坐稳,老大就开讲了,“告诉大家一个好消息,昨天终于把牛叉模型公司的 ...

  7. VB几种函数参数传递方法,Variant,数组,Optional,ParamArray

    VB几种函数参数传递方法,Variant,数组,Optional,ParamArray 一) 过程的参数被缺省为具有 Variant 数据类型. 1)ByRef按 地址传递参数在 VB 中是缺省的 按 ...

  8. IIS支持APK/ISO文件下载的方法

    默认把安卓手机应用或游戏的apk格式文件上传到服务器空间是不能直接下载的,这是因为IIS的默认MIME类型中没有.apk文件,所以无法下载.@VCOO 既然.apk无法下载是因为没有MIME,那么添加 ...

  9. iOS中常用的四种数据持久化方法简介

    iOS中常用的四种数据持久化方法简介 iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data 1.属性列表涉及到的主要类:NSUserDefaults,一般 ...

随机推荐

  1. react功能实现-数组遍历渲染

    在react中如何将一个数组遍历,并且逐个渲染在页面上? 1.在jsx渲染中,如果这个变量是一个数组,则会展开这个数组的所有成员. var arr = [ <h1>Hello world! ...

  2. Python统计字符串中出现次数最多的人名

    人名最多数统计题目摘自https://python123.io 描述编程模板中给出了一个字符串,其中包含了含有重复的人名,请直接输出出现最多的人名.‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬ ...

  3. Python基础练级攻略:day01

    如果你有足够长时间做某事,一定会更擅长. 知识点: 计算机基础 变量 运算符 if语句 for-in循环 函数 列表.元组.字典.字符串.集合 ascii.unicode.utf-8.gbk 区别 A ...

  4. 八进制、十进制、操作符(day04)

    把二进制表示的数字从右向左每三个数位分成 一组,每组用一个0到7之间的数字替换. 这个替换结果叫做数字的八进制表示方式 (八进制) 可以直接在程序里用八进制方式表示数字, 这种数字必须以0做开头 可以 ...

  5. [poj3565] Ants (二分图带权匹配)

    传送门 Description 年轻自然主义者比尔在学校研究蚂蚁. 他的蚂蚁以苹果树上苹果为食. 每个蚁群都需要自己的苹果树来养活自己. 比尔有一张坐标为 n 个蚁群和 n 棵苹果树的地图. 他知道蚂 ...

  6. Linux思维导图之rpm、yum、编译

    yum安装失败: 1.yum client 路径指向不正确:2.yum server 缓存未清理(yum clean all;yum makecache):3.网络不连通

  7. 图片base64格式转为file文件类型上传方法

    日常使用文件上传方式,都是通过input type='file'的文件选择框进行文件上传.但是会通过其他交互方式等到图片的base64格式进行上传.具体情况如下示意: 在项目开发中,需要进行照片采集, ...

  8. 利用python暴力破解压缩文件密码

    import randomimport sysimport zipfileimport timefrom threading import Threadfrom multiprocessing imp ...

  9. redis liunx系统安装

    同事总结非常好,借鉴一下 原文地址:https://www.cnblogs.com/dslx/p/9291535.html redis安装 下载redis的安装包上传到Linux服务器,安装包如下 h ...

  10. (22)Spring Boot 拦截器HandlerInterceptor【从零开始学Spring Boot】

    上一篇对过滤器的定义做了说明,也比较简单.过滤器属于Servlet范畴的API,与Spring 没什么关系.     Web开发中,我们除了使用 Filter 来过滤请web求外,还可以使用Sprin ...