.net文件下载的四种方法
using
System;
using
System.Data;
using
System.Configuration;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Web.UI.HtmlControls;
using
System.IO;
public
partial
class
_Default : System.Web.UI.Page
{
protected
void
Page_Load(
object
sender, EventArgs e)
{
}
//TransmitFile实现下载
protected
void
Button1_Click(
object
sender, EventArgs e)
{
Response.ContentType =
"application/x-zip-compressed"
;
Response.AddHeader(
"Content-Disposition"
,
"attachment;filename=z.zip"
);
string
filename = Server.MapPath(
"DownLoad/z.zip"
);
Response.TransmitFile(filename);
}
//WriteFile实现下载
protected
void
Button2_Click(
object
sender, EventArgs e)
{
string
fileName =
"asd.txt"
;
//客户端保存的文件名
string
filePath=Server.MapPath(
"DownLoad/aaa.txt"
);
//路径
FileInfo fileInfo =
new
FileInfo(filePath);
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader(
"Content-Disposition"
,
"attachment;filename="
+ fileName);
Response.AddHeader(
"Content-Length"
, fileInfo.Length.ToString());
Response.AddHeader(
"Content-Transfer-Encoding"
,
"binary"
);
Response.ContentType =
"application/octet-stream"
;
Response.ContentEncoding = System.Text.Encoding.GetEncoding(
"gb2312"
);
Response.WriteFile(fileInfo.FullName);
Response.Flush();
Response.End();
}
//WriteFile分块下载
protected
void
Button3_Click(
object
sender, EventArgs e)
{
string
fileName =
"aaa.txt"
;
//客户端保存的文件名
string
filePath = Server.MapPath(
"DownLoad/aaa.txt"
);
//路径
System.IO.FileInfo fileInfo =
new
System.IO.FileInfo(filePath);
if
(fileInfo.Exists ==
true
)
{
const
long
ChunkSize = 102400;
//100K 每次读取文件,只读取100K,这样可以缓解服务器的压力
byte
[] buffer =
new
byte
[ChunkSize];
Response.Clear();
System.IO.FileStream iStream = System.IO.File.OpenRead(filePath);
long
dataLengthToRead = iStream.Length;
//获取下载的文件总大小
Response.ContentType =
"application/octet-stream"
;
Response.AddHeader(
"Content-Disposition"
,
"attachment; filename="
+ HttpUtility.UrlEncode(fileName));
while
(dataLengthToRead > 0 && Response.IsClientConnected)
{
int
lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));
//读取的大小
Response.OutputStream.Write(buffer, 0, lengthRead);
Response.Flush();
dataLengthToRead = dataLengthToRead - lengthRead;
}
Response.Close();
}
}
//流方式下载
protected
void
Button4_Click(
object
sender, EventArgs e)
{
string
fileName =
"aaa.txt"
;
//客户端保存的文件名
string
filePath = Server.MapPath(
"DownLoad/aaa.txt"
);
//路径
//以字符流的形式下载文件
FileStream fs =
new
FileStream(filePath, FileMode.Open);
byte
[] bytes =
new
byte
[(
int
)fs.Length];
fs.Read(bytes, 0, bytes.Length);
fs.Close();
Response.ContentType =
"application/octet-stream"
;
//通知浏览器下载文件而不是打开
Response.AddHeader(
"Content-Disposition"
,
"attachment; filename="
+ HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
Response.BinaryWrite(bytes);
Response.Flush();
Response.End();
}
}
.net文件下载的四种方法的更多相关文章
- Fedora安装qt总结四种方法
在fedora上安装qt有四种方法,本人由于初次接触fedora,所以还是耐心的把三个方法都测试了一遍. 1. 下载源码,手动编译,选择路径安装,请参考<fedora15下搭建QT开发环境及编 ...
- 两个变量交换的四种方法(Java)
对于两种变量的交换,我发现四种方法,下面我用Java来演示一下. 1.利用第三个变量交换数值,简单的方法. (代码演示一下) class TestEV //创建一个类 { public static ...
- 织梦DedeCMS模板防盗的四种方法
织梦(DedeCMS)模板也是一种财富,不想自己辛辛苦苦做的模板被盗用,在互联网上出现一些和自己一模一样的网站,就需要做好模板防盗.本文是No牛收集整理自网络,不过网上的版本都没有提供 Nginx 3 ...
- 让一个图片在div中居中(四种方法)
第一种方法: <div class="title"> <div class="flag"></div> <div cl ...
- 运行jar应用程序引用其他jar包的四种方法
转载地址:http://www.iteye.com/topic/332580 大家都知道一个java应用项目可以打包成一个jar,当然你必须指定一个拥有main函数的main class作为你这个ja ...
- java中定时器的四种方法
package com.lid; import java.util.Calendar; import java.util.Date; import java.util.Timer; import ja ...
- Angular--页面间切换及传值的四种方法
1. 基于ui-router的页面跳转传参(1) 在AngularJS的app.js中用ui-router定义路由,比如现在有两个页面,一个页面(producers.html)放置了多个produce ...
- MYSQL获取自增ID的四种方法
MYSQL获取自增ID的四种方法 1. select max(id) from tablename 2.SELECT LAST_INSERT_ID() 函数 LAST_INSERT_ID 是与tabl ...
- linux下配置ip地址四种方法(图文方法)
主要是用第四种方法 (1)Ifconfig命令 第一种使用ifconfig命令配置网卡的ip地址.此命令通常用来零时的测试用,计算机启动后 ip地址的配置将自动失效.具体用法如下.Ipconfig ...
随机推荐
- 第一次用angularJS做后台管理点滴
很早以前就大概看过一点angualrjs,但是没有项目,一直没有进行下去,就是干巴巴的看着,过了一段时间发现什么也不记得了. 来yulebaby我的第一个后台管理是用easyui做的,做完那个以后发现 ...
- 【BZOJ2555】SubString(后缀自动机,LCT)
题意:给你一个字符串init,要求你支持两个操作 (1):在当前字符串的后面插入一个字符串 (2):询问字符串s在当前字符串中出现了几次?(作为连续子串) 你必须在线支持这些操作. 长度 <= ...
- truncate与delete删除数据的区别
- CF 39E. What Has Dirichlet Got to Do with That?(记忆化搜索+博弈论)
传送门 解题思路 首先很好写出一个\(O(ab)\)的记搜,但发现这样无法处理\(a=1\)和\(b=1\)的情况,这两种情况需要特判.首先\(a=1\)的情况,就是如果当前选手让\(a+1\)必胜, ...
- [CSP-S模拟测试]:w(树上DP)
题目背景 $\frac{1}{4}$遇到了一道水题,双完全不会做,于是去请教小$D$.小$D$看了${0.607}^2$眼就切掉了这题,嘲讽了$\frac{1}{4}$一番就离开了.于是,$\frac ...
- 如何设置Windows操作系统打印机与xlpd连接
Xlpd是Xmanager中负责远程打印的软件,除了打印远程文件,它还具备很多功能,本集将具体讲解Xlpd的主要功能. 主要功能如下: 1. 支持LPD协议(RFC1179) 在RFC1179中定义 ...
- Windows Filesystem filter driver
参考:http://www.codeproject.com/Articles/43586/File-System-Filter-Driver-Tutorial 关键点: To perform atta ...
- C++中的异常处理(下)
1,catch 语句块中可以抛出异常: 1,示意图: 2,func() 在 try 语句块中,说明它有可能抛出异常,抛出的异常有可能是整型或其它类型: 3,catch 语句块处理方式是将异常重新抛出去 ...
- Codeforces 1140C(贪心+堆)
题面 传送门 题意: 给出长度为n的序列b,t,定义一个子序列的值为\(\min\{ b_i\} \times \sum t_i\),求所有子序列中值最大的一个,输出最大值 分析 假如固定某个b[i] ...
- 使用vue配合组件--转载
1.由饿了么 UED (知乎专栏)设计的桌面端组件库已经开源,文档:Element,仓库: GitHub - ElemeFE/element: Desktop UI elements for Vue. ...