zoukankan
html css js c++ java
ASP.NET提供文件下载函数
//
输出硬盘文件,提供下载 支持大文件、续传、速度限制、资源占用小
//
输入参数 _Request: Page.Request对象, _Response: Page.Response对象, _fileName: 下载文件名, _fullPath: 带文件名下载路径, _speed 每秒允许下载的字节数
//
返回是否成功
public
static
bool
ResponseFile(HttpRequest _Request,HttpResponse _Response,
string
_fileName,
string
_fullPath,
long
_speed)
{
try
{
FileStream myFile
=
new
FileStream(_fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
BinaryReader br
=
new
BinaryReader(myFile);
try
{
_Response.AddHeader(
"
Accept-Ranges
"
,
"
bytes
"
);
_Response.Buffer
=
false
;
long
fileLength
=
myFile.Length;
long
startBytes
=
0
;
int
pack
=
10240
;
//
10K bytes
//
int sleep = 200;
//
每秒5次 即5*10K bytes每秒
int
sleep
=
(
int
)Math.Floor(
1000
*
pack
/
_speed)
+
1
;
if
(_Request.Headers[
"
Range
"
]
!=
null
)
{
_Response.StatusCode
=
206
;
string
[] range
=
_Request.Headers[
"
Range
"
].Split(
new
char
[]
{
'
=
'
,
'
-
'
}
);
startBytes
=
Convert.ToInt64(range[
1
]);
}
_Response.AddHeader(
"
Content-Length
"
, (fileLength
-
startBytes).ToString());
if
(startBytes
!=
0
)
{
_Response.AddHeader(
"
Content-Range
"
,
string
.Format(
"
bytes {0}-{1}/{2}
"
, startBytes, fileLength
-
1
, fileLength));
}
_Response.AddHeader(
"
Connection
"
,
"
Keep-Alive
"
);
_Response.ContentType
=
"
application/octet-stream
"
;
_Response.AddHeader(
"
Content-Disposition
"
,
"
attachment;filename=
"
+
HttpUtility.UrlEncode(_fileName,System.Text.Encoding.UTF8) );
br.BaseStream.Seek(startBytes, SeekOrigin.Begin);
int
maxCount
=
(
int
) Math.Floor((fileLength
-
startBytes)
/
pack)
+
1
;
for
(
int
i
=
0
; i
<
maxCount; i
++
)
{
if
(_Response.IsClientConnected)
{
_Response.BinaryWrite(br.ReadBytes(pack));
Thread.Sleep(sleep);
}
else
{
i
=
maxCount;
}
}
}
catch
{
return
false
;
}
finally
{
br.Close();
myFile.Close();
}
}
catch
{
return
false
;
}
return
true
;
}
调用例
Page.Response.Clear();
bool
success
=
ResponseFile(Page.Request, Page.Response,
"
filename
"
,
@"
C:\download.date
"
,
1024000
);
if
(
!
success)
Response.Write(
"
下载文件出错!
"
);
Page.Response.End();
查看全文
相关阅读:
openstack常见问题
30 个 Openstack 经典面试问题和解答
linux系统内存爆满的解决办法!~
iostat详解
线上应用故障排查之一:高CPU占用
对OpenStack运维架构的总结(转)
zabbix基本监控各指标简解
创建 OpenStack云主机
centos7系统中忘记了root管理员账号密码的解决方式(转)
MySQL高可用架构之MHA
原文地址:https://www.cnblogs.com/chengulv/p/467222.html
最新文章
ASP.NET MVC 从零开始
记录一次浏览器主页被劫持
使用HttpClient请求,问题记录
使用HttpClient实现并发请求
C# 添加动态属性
设计模式——单例模式
C# Dictionary<TKey,TValue>如何添加键重复的内容
Windows远程桌面,连接被拒绝,因为没有授权此用户帐户进行远程登录。
MySQL主主复制
Nginx反向代理
热门文章
IIS远程发布(Web Deploy)
python之datetime模块
python之os模块常用命令
docker初学
源码包安装apache
Linux 路由表详解及 route 命令详解
uname命令
find命令使用详解
数据库优化与备份详解
openstack创建一个虚拟机的过程
Copyright © 2011-2022 走看看