您的位置:首页 > 编程语言 > ASP

Asp.Net 上传大文件专题(4)--利用ajax技术显示上传进度

2009-07-10 12:01 691 查看
Asp.Net 上传大文件专题(4)--利用ajax技术显示上传进度

回顾上一篇

我们介绍了如何从HTTP请求流中将数据部分进行截取,同时将数据相关信息进行保存。

本篇概述:

用过ajax的朋友应该有听过XmlHttpRequest对象,ajax其实就是通过XmlHttpRequest对象来向服务器发出异步请求,并从服务器获得数据,然后用javascript来操作DOM而更新页面。

本篇就是要通过XmlHttpRequest对象来实现实时的进度显示。

效果图:

if (!IsPostBack)

string sguid = GetUploadId(bPreloadedEnitityBody, eContentEncode);//GetUploadId是自己写的一个方法用来从请求流中获取上传ID

UploadFileInfo ufiFileInfo = (UploadFileInfo)HttpContext.Current.Cache[sguid];//取出文件信息对象

其它页面如果要使用这个对象就得先获取ID,之后就可以自由操作了。

2、进度的显示

从图中我们可以看到,当显示进度的时候,背后的页面成灰色,并且无法响应任何事件,有点类似模态窗口。这个效果大家可以在网上查查,还是挺容易实现的。我这里有一段js显示此效果的代码(搜集于网上):

ModalDialog

接着讲我们的重点:如何实现定时局部刷新。

关于XmlHttpRequest对象,我这里就不详细讲述了,提供大家一个关于此的手册下载。为了大家更容易理解,我举个小例子:

小例子

通过以上小例子,大家应该已经对该对象有所了解了吧。为实现定时刷新,我把进度条单独放在一个页面中(如A.aspx),通过js的setTimeout来定时执行类似returnresponse这样的方法,然后在A.aspx.cs代码中获取文件信息对象,接着通过Response来反馈进度信息。这样在A.aspx页面中就可以获取到信息,并进行显示了。但是执行ActiveXObject将要花费不少代价,而且我们是定时执行该方法,显然会造成性能下降。在参考了构建一个pool来管理无刷新页面的xmlhttp对象后,决定采用这一方法,事实证明该方法确实有效。

利用pool后的代码

到这就差不多整个专题都结束了,接下来几天,我会把代码稍微调整下,然后传上来。

由于这段时间要上班,实在抽不出时间来整理,如果大家需要可以先拿去看看。不过代码写的有点乱,而且有些功能也没有完善,时间实在太少,大家见谅。

粗糙的工程
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐