.net几种文件下载的方法
.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几种文件下载的方法的更多相关文章
- WordPress忘记密码找回登录密码的四种行之有效的方法
WordPress忘记密码找回登录密码的四种行之有效的方法 PS:20170214更新,感谢SuperDoge同学提供的方法,登入phpMyAdmin后,先从左边选自己的数据库,然后点上面的 SQL ...
- .Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构)
.Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) [原文地址] 通过MVC控制器导出导入Excel文件(可用于java SSH架构) public cl ...
- .NET中常用的几种解析JSON方法
一.基本概念 json是什么? JSON:JavaScript 对象表示法(JavaScript Object Notation). JSON 是一种轻量级的数据交换格式,是存储和交换文本信息的语法. ...
- IOS开发-几种截屏方法
IOS开发-几种截屏方法 1. UIGraphicsBeginImageContextWithOptions(pageView.page.bounds.size, YES, zoomSc ...
- C语言的几种取整方法
C语言的几种取整方法 来源:http://blog.sina.com.cn/s/blog_4c0cb1c001013ha9.html 1.直接赋值给整数变量.如: int i = 2.5; 或 i = ...
- 24种设计模式--模版方法模式【Template Method Pattern】
周三,9:00,我刚刚坐到位置,打开电脑准备开始干活.“小三,小三,叫一下其它同事,到会议室,开会”老大跑过来吼,带着淫笑.还不等大家坐稳,老大就开讲了,“告诉大家一个好消息,昨天终于把牛叉模型公司的 ...
- VB几种函数参数传递方法,Variant,数组,Optional,ParamArray
VB几种函数参数传递方法,Variant,数组,Optional,ParamArray 一) 过程的参数被缺省为具有 Variant 数据类型. 1)ByRef按 地址传递参数在 VB 中是缺省的 按 ...
- IIS支持APK/ISO文件下载的方法
默认把安卓手机应用或游戏的apk格式文件上传到服务器空间是不能直接下载的,这是因为IIS的默认MIME类型中没有.apk文件,所以无法下载.@VCOO 既然.apk无法下载是因为没有MIME,那么添加 ...
- iOS中常用的四种数据持久化方法简介
iOS中常用的四种数据持久化方法简介 iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data 1.属性列表涉及到的主要类:NSUserDefaults,一般 ...
随机推荐
- 函数式编程-将Monad(单子)融入Swift
前言 近期又开始折腾起Haskell,掉进这个深坑恐怕很难再爬上来了.在不断深入了解Haskell的各种概念以及使用它们去解决实际问题的时候,我会试想着将这些概念移植到Swift中.函数式编程范式的很 ...
- BZOJ 3319: 黑白树 树+并查集+未调完+神题
Code: #include<bits/stdc++.h> #define maxn 1000003 using namespace std; char *p1,*p2,buf[10000 ...
- BZOJ 1579: [Usaco2009 Feb]Revamping Trails 道路升级 分层图最短路 + Dijkstra
Description 每天,农夫John需要经过一些道路去检查牛棚N里面的牛. 农场上有M(1<=M<=50,000)条双向泥土道路,编号为1..M. 道路i连接牛棚P1_i和P2_i ...
- 【转载】Java IO 转换流 字节转字符流
字节流输入字节流:---------| InputStream 所有输入字节流的基类. 抽象类.------------| FileInputStream 读取文件的输入字节流.----------- ...
- Ubuntu下解压(unzip)乱码的解决方法
在Windows上压缩的文件,是以Windows系统默认编码中文来压缩文件.由于zip文件中没有声明其编码,所以linux上的unzip一般以默认编码解压,中文文件名会出现乱码. 通过unzip -- ...
- request.getScheme()、 request.getServerName() 、 request.getServerPort() 、 request.getContextPath()
<% String basePath = request.getScheme() + "://" + request.getServerName() + ":&qu ...
- 将 Vue 组件库发布到 npm
制作了一套自己的组件库,并发布到npm上,项目代码见 GitHub . 前期准备 有一个npm账号 安装了vue-cli 搭建项目 vue init webpack hg-vcomponents cd ...
- python下的线程 进程,以及如何实现并发服务器
在一个CPU(一核)的电脑上, 程序的运行是并发运行的,调度的算法叫时间片轮转法,也叫轮询法 在多CPU(多核)的电脑上,一个CPU跑一个程序,刚程序运行数量小于核心数时,程序是并行的 并发:看上去一 ...
- 用JMeter作WebService接口功能测试(可以借助SoapUI来完成)
SoapUI里面的操作: Wsdl文件或链接导入或添加到SoapUI打开待测请求:运行请求:取URL SOAPAction .报文. JMeter里面的操作: 为线程组添加SOAP/XML-RPC ...
- Something about 博弈(POJ 3922 A simple stone game)
先是题目,本来是第三次训练的题,在这特别提出来讲. 先是题目: E - A simple stone game Time Limit:1000MS Memory Limit:65536KB ...