asp 如何实现带进度条的上传文件功能?

asp 如何实现带进度条的上传文件功能?

第1个回答  2006-11-10
以下就以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; //显示剩余时间(秒钟)

BytesDone.innerHTML=oRoot.children.item(3).text; //已上传数据大小

BytesTotal.innerHTML=oRoot.children.item(4).text; //总大小

BytesPerSecond.innerHTML=oRoot.children.item(5).text; //传输速率

Information.innerHTML=oRoot.children.item(6).text; //上传信息

}

if (oRoot.children.item(0).text-100<0) //只要文件没有传完,就每隔多少时间获取一次数据

timeoutid = setTimeout("bar()",50) //这里设定时间间隔是0.05秒,你也可以根据你的情况修改获取数据时间间隔

}

//-->

</script>

<form name="myform" method="post" action="progressupload.ASP" enctype="multipart/form-data" target=up>

<input type="file" name="filefield1"><br>

<input type="button" name="dosubmit" value="Upload" onclick="s()"><br>

<div id=bar1 style="display:none">

<table border="0" width="100%">

<tr>

<td><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><b>传送:</b></font></td>

</tr>

<tr bgcolor="#999999">

<td>

<table border="0" width="" cellspacing="1" bgcolor="#0033FF" id=PercentDone>

<tr>

<td><font size=1> </font></td>

</tr>

</table>

</td>

</tr>

<tr>

<td>

<table border="0" width="100%">

<tr>

<td><font face="Verdana, Arial, Helvetica, sans-serif" size="1">剩余时间:</font></td>

<td><font face="Verdana, Arial, Helvetica, sans-serif" size="1">

<span id=min></span> 分

<span id=secs></span> 秒

(<span id=BytesDone></span> KB of

<span id=BytesTotal></span> KB 已上传)</font></td>

</tr>

<tr>

<td><font face="Verdana, Arial, Helvetica, sans-serif" size="1">

传送速度:</font></td>

<td><font face="Verdana, Arial, Helvetica, sans-serif" size="1">

<span id=BytesPerSecond></span> KB/秒</font></td>

</tr>

<tr>

<td><font face="Verdana, Arial, Helvetica, sans-serif" size="1">信息:</font></td>

<td><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><span id=Information></span></font></td>

</tr>

</table>

</td>

</tr>

<tr></tr>

</table>

</div>

<iframe name="up" style="display:none"></iframe>

</form>

</body>

</HTML>

progressbar.ASP(返回上传状况数据的文件)

<%@EnableSessionState=False%>

<%

On Error Resume Next

Set theProgress = Server.CreateObject("ABCUpload4.XProgress") '创建上传组件对象

theProgress.ID = Request.QueryString("ID")

'将返回数据以XML格式输出

%>

<?XML version="1.0" encoding="gb2312" ?>

<plan>

<PercentDone><%=theProgress.PercentDone%></PercentDone>

<min><%=Int(theProgress.SecondsLeft/60)%></min>

<secs><%=theProgress.SecondsLeft Mod 60%></secs>

<BytesDone><%=Round(theProgress.BytesDone / 1024, 1)%></BytesDone>

<BytesTotal><%=Round(theProgress.BytesTotal / 1024, 1)%></BytesTotal>

<BytesPerSecond><%=Round(theProgress.BytesPerSecond/1024, 1)%></BytesPerSecond>

<Information><%=theProgress.Note%></Information>

</plan>

progressupload.ASP(处理上传文件)

<%@EnableSessionState=False%>

<%

Response.Expires = -10000

Server.ScriptTimeOut = 300

Set theForm = Server.CreateObject("ABCUpload4.XForm")

theForm.Overwrite = True

theForm.MaxUploadSize = 8000000

theForm.ID = Request.QueryString("ID")

Set theField = theForm("filefield1")(1)

If theField.FileExists Then

theField.Save theField.FileName

End If

%>

<HTML>

<body>

传送结束

</body>

</HTML>

asp 如何实现带进度条的上传文件功能?
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....

求asp有上传进度条的无组件上传代码
进度条样式可自行修改,样式文件为css.css 具体进程信息请查看js\/custom.js中的getInformation(info)中的信息对象的说明 本次给上传类增加了一个方法setApp,用来设置Application;调用方法Upload.setApp state,total,current,description 参数说明:state--当前状态,建议取值请查看js\/custom.js中的getInformation(...

asp.net 文件复制进度条实现
1.计算文件总个数(或者总大小)2.使用新线程拷贝文件 3设置全局变量存储拷贝数目 4.新建Timer每秒监视该数目,使用委托控制progressbar进度即可。<asp:Timer ID="Timer1" runat="server" Interval="1000" ontick="Timer1_Tick"> <\/asp:Timer> <asp:UpdatePanel ID="UpdatePanel1" runat="server">...

急求ASP"纯英文版上传带进度条的FLASH"源程序
无组件上传带真实进度条其中upload.asp为核心代码,除非特殊需要,一般不需要修改demo.htm是演示无刷新进度条(IE5.5+支持)demo.asp为处理demo.asp上传的文件,因为演示需要,在Demo.asp中仅仅上传,不作保存,如果需要保存,只需去掉相关注释即可。Example_Normal.htm,一个普通的上传的例子Example_Normal...

asp上传图片原理(不要代码)只求论理
试验一下上传刚才的文本文件,输出结果证明这样分块读取的内容是完整的,并且在While循环中,我们可以在每次循环时将当前状态记录到Application中,然后我们就可以通过访问该Application动态获取上传进度条。 另:上例中是通过字符串拼接的,如果是要拼接二进制数据,可以通过ADODB.Stream对象的Write方法,示例代码如下: Set b...

asp.net C# b\/s 系统 怎么实现文件的上传下载。
点击上传按钮:protected void btnupload_Click(object sender, EventArgs e){ string file = uploadfile.SaveFile(uploadpic, upleixing,"uploadpic");if (UpType.ToLower() == "one"){ Response.Write("parent.document.form1." + htmControl + ".value='" + file + "';");} else { R...

asp.net怎么给FileUpload服务器控件做进度条啊?
asp.net有个进度条控件。你直接用就可以了。

在ASP程序里如何做点击"提交"按钮后出现"请稍后...正在提交"字样_百度...
网页或文件加载Loading进度条效果之一var load_line_i=1;var load_line_n=500;function load_n(txt){load_line_i+=400\/load_line_n;window.status="请等待..已完成"+Math.floor(load_line_i\/4.00)+"%";load_txt.innerText=txt+" "+Math.floor(load_line_i\/4.00)+"%";document.all("line").width...

如何解决ASP上传大文件
ASP上传大文件的效率并不是很好,不建议使用。可以找一些上传的插件来用,Flash的有相关的源码,同时你也可以搜索 “ASP带进度条的无组件上传”网上有很多相关的示例可参考。希望对你有帮助 。

WEB真实的进度条如何实现
我提供一个思路,用一个变量A记录发了多少封,你每发完一封 就用A\/500可以得到一个百分比,绑到UpdateProgress就可以了

相似回答