首页 新闻 搜索 专区 学院

asp.net下载问题

0
悬赏园豆:100 [已关闭问题] 关闭于 2011-11-04 09:58

asp.net下载文件时 ,能否检测到文件是否下载成功的状态吗?

曲达子的主页 曲达子 | 初学一级 | 园豆:90
提问于:2011-11-02 11:59
< >
分享
所有回答(2)
0

如果你就是站点上的一个静态文件,不经过你的代码,那是很难检测的。如果用户请求的一个地址,经过你的代码,然后你再将文件数据流写入response的的数据流里,这样的做法是可以检测到的。代码类似这样:

 var buffer = new byte[10240];
var succeed = true;
using (FileStream fs = FileManager.LoadFile(id))
{
var lengthRead = 0;
while ((lengthRead = fs.Read(buffer, 0, buffer.Length)) > 0)
{
if (!response.IsClientConnected)
{
succeed = false;
break;
}

response.OutputStream.Write(buffer, 0, lengthRead);
response.Flush();
}
}
if (succeed)
{
//成功下载了
}

FileManager.Load(id)是根据id获取到对应文件的FileStream,不是framework的方法你别弄混了。用户请求的url大概是http://files.mysite.com/12345,其中12345是文件的id。如果用户下载的文件是类似这样的:http://www.mysite.com/client.exe,其中client.exe是你站点的一个静态文件,这样是很难检测到下载成功的。

水牛刀刀 | 园豆:6350 (大侠五级) | 2011-11-02 12:11

如上图:这样是不行的,当我点击取消,他还是视为已下载成功了!

支持(0) 反对(0) 曲达子 | 园豆:90 (初学一级) | 2011-11-02 12:48

@曲达子: 我只是提供给你一个思路,很多细节是要你自己修改的。比如刚才我贴的代码可以大概这样修改:默认succeed是false,每次写入一定的字节数,就累加,最后判断是否写入的总字节数等于文件大小,等于的话才认为是成功。

支持(0) 反对(0) 水牛刀刀 | 园豆:6350 (大侠五级) | 2011-11-02 12:59

@水牛刀刀: 我知道 ,你的是否下载成功是以Response.IsClientConnected为判断条件,但是这明显是不行的。

支持(0) 反对(0) 曲达子 | 园豆:90 (初学一级) | 2011-11-02 13:09

@曲达子: 那是最开始的代码啊,我上面的回复不是说了吗,以最终写入字节数是否与文件大小相等为条件。

支持(0) 反对(0) 水牛刀刀 | 园豆:6350 (大侠五级) | 2011-11-02 13:29
0

以前客户提了一个相同的需求,我们直接否了。只要弹出了保存,我们就认为一次成功的下载。

【当耐特】 | 园豆:645 (小虾三级) | 2011-11-02 20:04

看来还是没有解决方案啊~

支持(0) 反对(0) 曲达子 | 园豆:90 (初学一级) | 2011-11-04 09:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册