当前位置: 首页 > 图文教程 > 网络编程 > ASP > 上传的进度条 实时反映上传情况

ASP
ASP页面随机添加字符实现防复制的代码
ASP中应用事务处理技巧
asp下比较全面的获取IP地址的代码
ASP实现缓存类无错版
asp下实现批量插入数据的方法
asp下用ADODB.Stream代替FSO读取文本文件
asp之基于adodb.stream的文件操作类
自己写的文件操作的function和Sub vb.net dll
kesion科讯V4.0管理员Key工具
asp 获取access系统表,查询等操作代码
asp之字符串函数示例
asp之日期和时间函数示例
ASP 关于动态数据显示页面得锚点
Asp无组件上传进度条解决方案
ASP控制每页打印行数
用ASP实现分级权限控制
ASP在服务器自动解压RAR文件
用ASP实现远程将文件批量改名的代码
在Asp程序中取得表单所有内容的代码
使用ASP实现网站的“目录树”管理的代码

ASP 中的 上传的进度条 实时反映上传情况


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 223 ::
收藏到网摘: n/a

        asp中使用组件上传时,有点麻烦就是不知道上传进度是多少,虽然有的提供了上传进度条,例如abcupload(下载地址:http://www.websupergoo.com)已经提供了显示当前上传状态的方法,里面就有专门的实例(在安装目录的Examples下面的progressupload.htm),它是提交数据的同时弹出一个反映进度的页面(progressbar.asp),然后通过这个页面自刷新来每隔一点时间获取当时的上传状态,然后把它们显示出来,但是用页面自刷新的方法效率比较低,不不好调节刷新时间间隔(最小间隔为1秒),而且服务器端返回数据量大,所以不能很好的实时反映上传情况。在客户端使用javascript调用MSXMl对象和setTimout方法去定时load一个xml文件可以实现无刷新定时获取服务器端数据,在这里可以让progressbar.asp输出xml格式的数据,然后供客户端load,仅返回必要的几个参数,这样:页面不刷新;传输的数据少,不需要把所有数据全传到客户端 ,只传输反映状态的数据,如果定时器设置的时间足够小,那么我们就可以"实时"看到上传的状况了。以下就以abcupload4为例来说明怎么来制作实时的文件上传进度条。

(注:我们在abcupload自带例子基础上改进。)

progressupload.htm(上传文件的前台提交,我们让进度条在这个里面显示)



<html>

<body>



<script language="javascript">

<!--

theUniqueID = (new Date()).getTime() % 1000000000;

function s()    //让数据提交的同时执行显示进度条的函数

{

       bar();      //开始执行反映上传情况的函数

       document.myform.action = "progressupload.asp?ID=" + theUniqueID;  //处理上传数据的程序

       document.myform.target="up"  //将提交的数据放在一个名字是up隐藏的iframe里面处理,这样提交的页面就不会跳转到处理数据的页

       document.myform.submit();     //提交表单





}

function bar()

{

       bar1.style.display='';  //让显示上传进度显示的层的可见

       var timeoutid=null;        //这个变量是作定时器的ID

    var oXMLDoc = new ActiveXObject('MSXML');             //创建'MSXML'对象

    sURL = "progressbar.asp?ID=" + theUniqueID + "&temp="+Math.random();      //获取上传状态数据的地址

    oXMLDoc.url = sURL;     //load数据

    var oRoot=oXMLDoc.root;     //获取返回xml数据的根节点

    if(oRoot.children != null)  

    {

              if (oRoot.children.item(0).text-100==0)              //文件上传结束就取消定时器

                     clearTimeout(timeoutid)

              PercentDone.style.width=oRoot.children.item(0).text+"%";         //设置进度条的百分比例

              //根据返回的数据在客户端显示

              min.innerHTML=oRoot.children.item(1).text;       //显示剩余时间(分钟)

              secs.innerHTML=oRoot.children.item(2).text;       //显示剩余时间(秒钟)