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

ASP
Adodb.Command 平时很少注意到的一个参数
Asp.Net控件加载错误的解决方法
远程连接access数据库的方法
创建具有JScript的HTML的XMLHTTP
在Asp中如何快速优化分页的技巧
用VB生成DLL封装ASP代码,连接数据库
RS.OPEN SQL,CONN,A,B 全接触
利用adodb.stream直接下载任何后缀的文件(防盗链)
用ASP编程控制在IIS建立Web站点的程序代码
使用VBScript操作Html复选框(CheckBox)控件
把文章内容中涉及到的图片自动保存到本地服务器
两个不同数据库表的分页显示解决方案
使用组件封装数据库操作(一)
使用组件封装数据库操作(二)
如何在pb中创建COM组件,并在asp中调用并返回结果集?
用ASP和Microsoft.XMLDOM分析远程XML文件
浅谈无刷新取得远程数据技术
将ASP纪录集输出成n列的的表格形式显示的方法
在ASP中通过oo4o连接Oracle数据库的例子
Server Application Error详细解决办法

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 91 ::
收藏到网摘: 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;       //显示剩余时间(秒钟)