关灯
开启左侧

[网页制作] asp.net下载大文件的实现方法

[复制链接]
swmozowtfl 发表于 2015-7-31 22:04:01 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
 
本文实例讲述了asp.net下载大文件的实现方法。分享给大家供大家参考。具体分析如下:
当我们的网站需要支持下载大文件时,如果不做控制可能会导致用户在访问下载页面时发生无响应,使得浏览器崩溃。可以参考如下代码来避免这个问题。
关于此代码的几点说明:
1. 将数据分成较小的部分,然后将其移动到输出流以供下载,从而获取这些数据。
2. 根据下载的文件类型来指定 response.contenttype 。(参考oschina的这个网址可以找到大部分文件类型的对照表:)
3. 在每次写完response时记得调用 response.flush()
4. 在循环下载的过程中使用 response.isclientconnected 这个判断可以帮助程序尽早发现连接是否正常。若不正常,可以及早的放弃下载,以释放所占用的服务器资源。
5. 在下载结束后,需要调用 response.end() 来保证当前线程可以在最后被终止掉。
代码如下:
using system;
namespace webapplication1
{
public partial class downloadfile : system.web.ui.page
{
protected void page_load(object sender, eventargs e)
{
system.io.stream istream = null;
// buffer to read 10k bytes in chunk:
byte[] buffer = new byte[10000];
// length of the file:
int length;
// total bytes to read.
long datatoread;
// identify the file to download including its path.
string filepath = server.mappath(/) +./files/textfile1.txt;
// identify the file name.
string filename = system.io.path.getfilename(filepath);
try
{
// open the file.
istream = new system.io.filestream(filepath, system.io.filemode.open,
system.io.fileaccess.read, system.io.fileshare.read);
// total bytes to read.
datatoread = istream.length;
response.clear();
response.clearheaders();
response.clearcontent();
response.contenttype = text/plain; // set the file type
response.addheader(content-length, datatoread.tostring());
response.addheader(content-disposition, attachment; filename= + filename);
// read the bytes.
while (datatoread > 0)
{
// verify that the client is connected.
if (response.isclientconnected)
{
// read the data in buffer.
length = istream.read(buffer, 0, 10000);
// write the data to the current output stream.
response.outputstream.write(buffer, 0, length);
// flush the data to the html output.
response.flush();
buffer = new byte[10000];
datatoread = datatoread - length;
}
else
{
// prevent infinite loop if user disconnects
datatoread = -1;
}
}
}
catch (exception ex)
{
// trap the error, if any.
response.write(error :  + ex.message);
}
finally
{
if (istream != null)
{
//close the file.
istream.close();
}
response.end();
}
}
}
}
希望本文所述对大家的asp.net程序设计有所帮助。

更多网页制作信息请查看: 网页制作
 

精彩评论9

正序浏览
seazvyt 发表于 2015-9-13 18:22:15 | 显示全部楼层
 
对于这种刚发的帖子,我总是毫不犹豫的顶了。如果火了就是个前排,可以混个脸熟,说不定谁好心就给粉了…稳赚不赔;如果沉了就感觉是我弄沉的,很有成就感,还能捞经验。
 
mwxny 发表于 2015-9-13 18:22:21 | 显示全部楼层
 
这篇帖子构思新颖,题材独具匠心,段落清晰,情节诡异,跌宕起伏,主线分明,引人入胜,平淡中显示出不凡的文学功底,可谓是字字珠玑,句句经典,是我辈应当学习之典范(不好意思回错帖了
 
Mqokjdvq 发表于 2015-9-13 18:23:16 | 显示全部楼层
 
感觉这个论坛的站长太牛B了,好强大啊
 
buingeEvineus 发表于 2015-9-13 18:23:36 | 显示全部楼层
 
这个论坛值得推荐,给了我们这么好的一个平台
 
wwzcdenleclv 发表于 2015-9-13 18:23:37 | 显示全部楼层
 
这就是我斗胆的一点粗略分析,每天睡觉以前,我都会把您的帖子再三拜读,拜读。
 
seazvyt 发表于 2015-12-25 20:48:33 | 显示全部楼层
 
老大,我好崇拜你哟
 
mwxny 发表于 2015-12-25 20:48:44 | 显示全部楼层
 
这个论坛值得推荐,给了我们这么好的一个平台
 
effoggikeftor 发表于 2015-12-25 20:48:53 | 显示全部楼层
 
只是本着“看贴(虽然看不懂)回贴,利人利己的中华民族优秀传统美德”,顺便赚点积分。
 
effoggikeftor 发表于 2015-12-25 20:49:04 | 显示全部楼层
 
cd:遮~~~~~~
 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


0关注

1粉丝

2503帖子

热门图文
热门帖子
排行榜
作者专栏

关注我们:微信订阅号

官方微信

APP下载

全国服务Q Q:

956130084

中国·湖北

Email:956130084@qq.com

Copyright   ©2015-2022  站长技术交流论坛|互联网技术交流平台Powered by©Discuz!技术支持:得知网络  

鄂公网安备 42018502006730号

  ( 鄂ICP备15006301号-5 )