.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. Visual Basic for Application

    Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'The note of Visual Basic for Applicati ...

  2. HDU_1847_基础博弈sg函数

    Good Luck in CET-4 Everybody! Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  3. Idea中修改servlet模板

    1.点击左上角的File: Setting --> Editor --> File and Code Templates --> Other --> web -->Ser ...

  4. eas之辅助编辑功能

    copy.cut.paste// copytable.getEditHelper().copy();// cuttable.getEditHelper().cut();// pastetable.ge ...

  5. tesuto-Mobius

    求 \begin{equation*}\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)=k]\end{equation*} 的值. 莫比乌斯反演吧. \begin{align*}& ...

  6. UNIX C 信号

    1.信号处理 #include <signal.h> typedef void(*sighander_t)(int); sighander_t signal(int signum,sigh ...

  7. LeetCode SQL题目(第一弹)

    LeetCode SQL题目 注意:Leetcode上的SQL编程题都提供了数据表的架构程序,只需要将它贴入本地数据库即可调试自己编写的程序 不管是MS-SQL Server还是MySQL都需要登陆才 ...

  8. python爬虫05 | 年轻人,不会正则表达式你睡得着觉?有点出息没有?

    现在 你已经会使用 python 模拟浏览器 进行一些 Http 的请求了 那么请求完之后 服务器返回给我们一堆源代码 我们可不是啥都要的啊 我们是有原则的 我们想要的东西 怎么能一股脑的啥都往自己兜 ...

  9. mongodb--安全

    安全和认证 mongodb和redis比较像,安全部分依赖于其所存在的环境 一定要把mongodb放在一个可信的环境下去运行,mongodb只能被web服务器所访问,禁止开外网端口访问mongodb, ...

  10. HDU 2224 The shortest path

    The shortest path Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...