.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,一般 ...
随机推荐
- 【sqli-labs】 less25 GET- Error based -All you OR&AND belong to us -string single quote(GET型基于错误的去除了or和and的单引号注入)
加单引号 order by一下 http://localhost/sqli-labs-master/Less-25/?id=1' order by 1%23 order by 变成了der by 下面 ...
- Shiro Shiro Web Support and EnvironmentLoaderListener
Shiro Shiro Web Support 主要参考: http://shiro.apache.org/web.html 还有涛哥的 作为资源控制访问的事情,主要使用在网络后台方面,所以了解了本地 ...
- PKCS #1 RSA Encryption Version 1.5 填充方式
在进行RSA运算时需要将源数据D转化为Encryption block(EB).其中pkcs1padding V1.5的填充模式安装以下方式进行 (1) EB = 00+ BT+PS +00 + D ...
- drf04 drf视图类
REST framework 提供了众多的通用视图基类与扩展类,以简化视图的编写. 1.2个视图基类 1.1. APIView rest_framework.views.APIView APIView ...
- BZOJ 5466: [Noip2018]保卫王国 动态DP
Code: // luogu-judger-enable-o2 #include<bits/stdc++.h> #define ll long long #define lson (now ...
- [ZJOI2016]小星星(容斥+dp)
洛谷链接:https://www.luogu.org/problemnew/show/P3349 题意相当于给一棵树重新赋予彼此不同的编号,要求树上相邻的两个节点在给定的另外一个无向图中也存在边相连. ...
- php第四节课
对象 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o ...
- Linux目录与相关配置文件讲解
linux目录介绍及配置文件详细介绍 重要目录简介 目录名 作用 boot 与电脑启动相关,推荐单独分区. etc 存放配置文件 mnt 一般用来设置挂载点 src.sys.proc 与系统内核相关, ...
- Vue packages version mismatch
开发过程中,之前做的vue项目,一段时间后拿出来重新运行,报错: 打开vue-template-compiler/index.js查看错误提示,如下: 当安装的vue版本和package.json中的 ...
- 第一次训练 密码:acmore
#include <cstdio> #include <cstring> #define M 100010 #define INF 0x7FFFFFFF #define Min ...