|
蓝森林 http://www.lslnet.com 2006年8月25日 8:28
[asp]给稻香老农的无组件上传加上漂亮真实的进度条
[b]1。基本原理[/b]
分块接收数据,把接收的数据和全部数据的大小写入xml文件,由客户端的进度条显示文件读取。
如果你还没有使用过这个东西,请到
http://www.5xsoft.com
下载相关代码学习,这里不进行基础解释。
[b]2。文件组成[/b]
[1]randomString.asp 随机字符串生成函数。
[2]fileUpProgress.asp 上传进度显示。
[3]fileUpProgressRead.asp 上传进度读取。
[4]wang_upload_5xsoft.inc 我稍稍修改的稻香老农的无组件上传类。
你可以把这四个文件放在include目录下,任何目录下的文件都可以调用。
[b]3。使用方法[/b]
假设你原来实现上传功能所用的两个文件是:upload.asp和uploadSave.asp。
上述四个文件放在include目录下。你可以改变路径,注意修改相关路径即可。
1.upload.asp中增加以下代码:
-------------------------------------------------------------
[color=blue]<!--#include file="include/randomString.asp" -->
<% ProgressID = gen_key(10) %>[/color]
....
<form action="test_uploadSave.asp" method="post" enctype="multipart/form-data" [color=blue]onSubmit="myOpen(this)"[/color]>
....
</form>
[color=blue]<script>
function myOpen(form){
window.open("include/fileUpProgress.asp?progressID=<%=ProgressID%>","","width=500,height=200,scrollbars=no,toolbar=no,status=no,resizable=no,menubar=no,location=no");
var url=form.action;
if (url.indexOf("?",0)==-1) {
form.action = url+"?progressID=<%=ProgressID%>";
}else{
form.action = url+"&progressID=<%=ProgressID%>";
}
}
</script>[/color]
-------------------------------------------------------------
2.在uploadSave.asp中include这个wang_upload_5xsoft.inc 文件。原来的upload_5xsoft.inc 不必使用。
[color=blue]<!--#include file="include/wang_upload_5xsoft.inc" -->[/color]
假设原来你用了
set upload=new upload_5xsoft
这么一句,那么现在改成
[color=blue]set upload=new upload_5xsoft
upload.ProgressID=Request.QueryString("progressID") '一定是这行在先。
upload.GetUpFile[/color]
这么三行即可。其他保持原来的写法即可。
----------------------------------------------------------
完毕。
[b]4。使用进度指示后的影响[/b]
对你原来的功能没有任何影响。它只是一个额外的进度显示,和数据处理部分毫不掺和。
[b]5。效果贴图[/b]
[img]http://www.mytju.com/upfile/20049917152298.gif[/img]
[b]6。示范代码下载[/b]
http://mytju.com/classCode/
欢迎大家试用并提出宝贵意见。多谢! |
占坑~~收藏~~ |
我还以为我是沙发.被抢了.收藏之 |
我想问一下,这个进度条是根据上传数据的大小改变还是只是一个视觉效果(无实际意义的)?
还有你的"基本原理"写得不是很明了,能仔细说说么? |
呵呵,这个当然是真实的了……尝试一下就知道了。
其实很简单,你下载代码看看就明白了。
其实有人说用application来保存进度,我没有尝试。
因为用session是不可以的,application我尝试了几把,也没成功(也可能我把机器折腾没有响应了)。
所以只有用文件来周转了。 |
厉害~ |
对客户端有什么要求吗? |
对了,龟龟,我用了这个东西:Microsoft.XMLDOM
--------------------------
客户端要求什么呢?得是IE6吧? |
刚才想问这个问题,原理是什么?讲得不是很清楚!
听说微软update的那个进度条还要下载客户端插件!
百分比是怎么实现的,是如何讲算上传的进度的?
|
我down下来了~!谢谢版主~! |
有人用了没有,怎么样?有出错的情况没有? |
结果总是这样:
文件上传进度指示条
状态:正在初始化....
已经上传:上传动作尚未启动或已经完成!
使用时间:1 秒
平均速率:0 KB/秒
|
//还有,我直接用化境的上传类子.
总是出现如下错误,在好多asp用到这个类的程序里也是如此,可是到虚机上有时也可以用了.还有这个最大可以上传多大文件呢??:
Server 对象 错误 'ASP 0177 : 800401f3'
Server.CreateObject 失败
/upclass/example/upload_5xsoft.inc,行 36
无效的类别字符串 化境HTTP上传程序 Version 2.0
请输入要上传至的目录!
|
set tStream = Server.CreateObject("adodb.stream")
不支持adodb.stream。 |
收藏先... |
我是用ASPUPLOAD这个组件。找一个有注册码的用用吧。上面还有很多例子。上面的进度条很好。我把它改成了XMLDOM的。成功了。呵呵!!!! |
文件小网络畅通的情况下,进度条根本就读不到100%! |
这个没有办法,速度太快,进度文件创建后马上被清除了。
进度条显示文件就读不到进度了。
[没有开始上传]和[上传已经完成]都不属于[上传进度中],当然没有进度。
我已经提示:尚未启动,或已经上传完成。 |
厉害!而且我感觉上传速度也有质的飞跃,以前也用稻香老农的组件上传,大小超过1M就变得很慢,感觉像死机,现在居然几秒钟就搞定了,版主是不是把它优化啦! |
上传大文件时,发现服务器内存占用不断上升,最后死机.如果多人上传文件(大数据)或上传多文件时,出现服务器内存溢出. |
楼上的是无组件上传本身的问题了。我只是加个进度条而已。 |
喜欢收藏了! |
感觉实用性不大,因为一般在线上传的也就是一些很小的图片,大的东西还是通国FTP上传,不过还是感谢楼主!!! |
即使只能传小文件
还是一样很值得学习 |
我找了个上传的是这样的,怎么加上进度条?
<%
Server.ScriptTimeout=999
%>
<!--#include file="conn1.asp"-->
<!--#include file="UpLoadClass.asp"-->
<%
dim strFile1,lngSize1,strFile2,lngSize2,dblTime,dblSpeed,strIp,strUser,strMessage
dim time1,t,v
time1=timer()
Set myrequest=new UpLoadClass
myrequest.MaxSize = 0
myrequest.FileType = ""
myrequest.Savepath = "UpLoadFile/"
myrequest.open
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>上传信息确认</title>
<link href="../style/basic.css" rel="stylesheet" type="text/css">
</head>
<body>
<table width="760" border="0" align="center" cellpadding="5" cellspacing="0" bgcolor="#FFFFFF" style="border:1px solid #999999">
<tr>
<td>
<blockquote>
<%
response.write "<br>"&myrequest.Version&"<br>"
strFile1=myrequest.Form("Photo")
intError=myrequest.Form("photo_Err")
lngSize1=0
if intError>=0 then
response.write "<br>上传文件1名为:<a href='"&myrequest.Savepath&strFile1&"' target='_blank'>"&strFile1&"</a>"
response.write "<br>上传文件1类型:"&myrequest.Form("Photo_Type")
response.write "<br>上传文件1原名:"&myrequest.Form("Photo_Name")
response.write "<br>上传文件1宽度:"&myrequest.Form("photo_Width")
response.write "<br>上传文件1高度:"&myrequest.Form("photo_Height")
lngSize1=myrequest.Form("photo_Size")
if intError>0 then strFile1="Err:"&intError&"/"&myrequest.Form("photo_Name")
response.write "<br>上传文件1大小:"&lngSize1&" Byte"
response.write "<br>文件1上传路径:"&myrequest.Form("photo_Path")
response.write "<br>文件 1 扩展名:"&myrequest.Form("photo_Ext")
else
………………………… |
需要修改uploadClass.asp。
其他差不多。 |
如果要上传两个文件怎么办? |
哇,牛呀,我早就觉得 老农 的上传没进度条很不爽.
对我来说还是怎么用比较重要.hehe
但是我时常做的都是多文件上传,能都显示进度条吗? 啊 ... |
这是整体上传的进度,和几个文件没有关系的。
只要是上传就有进度的。 |
en,好象真的不错.
不过我提个建议:
"尚未启动,或已经上传完成。"
这样的提示真不好,让用户去猜吗?
能不能改进成检测一下被上传的文件是不是已经存在:
set CheckFile=server.createobject("scripting.filesystemobject")
if CheckFile.fileExists(Server.mappath(".....") then
报告"已经上传完成
else
报告"未启动上传"
end if
行不行得通?
|
因为这个进度条是任何一个上传页面都可以用的,是通用的,
所以无法知道人家上传的文件名是什么,而且人家可以改名保存的。
所以这个方法行不通了。
1。文件较大的时候,这个就应该表示还没有启动,服务端的进度文件还没有生成,等一会进度条就会走了。
2。文件较小的时候,几乎就瞬间完成了,进度条刚显示上传动作已经完成了。服务端的进度文件生成后已经被删除了。进度文件还是不存在。
两种情况是无法区分的。所以我提示:尚未启动或已经完成。
很好猜得,完成了的话,上传页就已经有结果了啊。没启动的话,一会就会走了。 |
一孤行在上个帖子中说
是怎么回事啊??发现没有文件被上传 |
萧萧小雨,请问怎么样来限制上传格式~!?我加了
if right(filename,3)="mid" or right(filename,3)="mp3" or right(filename,3)="wma" 就执行上传动作~!但却总是不行~! |
你是想客户端拦截吧?
下面是检测图片的,改改就成。参数是文件框的value。
========================
function isPic(filePath){
var temp;
var ExtList = ".jpg.gif.bmp.png.swf";
var the_ext = filePath.substr(filePath.lastIndexOf(".")+1).toLowerCase();
if (ExtList.indexOf(the_ext)==-1){
alert("不是图片,请选择图片文件!");
return false;
}
return true;
}
======================= |
OK~!谢谢~!最近用了这个改进的组件~!当上传文件比较大时~!效果非常不错~!但当文件很小时~!那就不行了~!因为程序根本没来得急检测出上传文件的属性,文件就已经上传了~!这样导致那个进度条一直处于"正在初始化...."的状态,并且进度条弹出框要手工关掉~!我想各位使用者应该也发生了这种情况吧~!? |
萧萧小雨~!你上面的JS我觉得在我这种情况不好改呀~!我把我的代码贴上来~!帮我看看~!TKS~!我只允许它上传mp3,mid,wma三种文件格式.!
if trim(F_File)<>"" and (right(trim(F_File),3)="mid" or right(trim(F_File),3)="mp3" or right(trim(F_File),3)="wma") then
上面的F_File为上传的文件名~!上面的语句只能让后缀为mp3,mid,wma的文件上传,但当把后缀为MP3,MID,WMA或为Mp3,Mid,Wma时都上传不了~!请问哪位有什么办法解决~!? :confused: :mad: |
LCase((right(trim(F_File),3))=... |
有问题:
1.fileUpProgress.asp必须和上传的ASP文件页面在同一个文件夹才行?
因为我几个文件夹里都有文件有上传功能的,如果是这样,就得每个文件夹都COPY一个fileUpProgress.asp
如果不是就用不了,出现上传动作尚未启动或已经完成!而且窗口一直不会关闭。
2.当上传的文件大于20M时,进度条已显示100%并关闭了,但是文件还要等一阵才上传完。我是在本地电脑测试的,网速很快了,不知上传到网络会怎样? |
1.恩,是个问题。
因为进度文件是uploadSave的文件生成的,是和他一个目录的,fileUpProgress.asp也是从这个目录取得,所以........
恩,我得改下。
2。到了网络应该没有这个问题。
|
好东西,虽然看到的晚点,收之 |
楼主好厉害啊!
|
现在我想用这个类同时上传两个文件应该怎么改呢 |
收藏!!!!!!!!!111 |
fxlijun在上个帖子中说
这个没什么难的吧,看看说明文档。
http://www.5xsoft.com
自己down一个,看说明吧。 |
谢谢楼主了! |
虽然一直用ASPCNUP,但还是收藏了!什么时候也给ASPCNUP加个进度条,那俺也爽爽! |
啦啦啦,我改好了。现在可以在任意目录下文件中进行调用了。
而且“"尚未启动,或已经上传完成。"这个提示也不会有了。
只会提示”尚未启动“了。
进度条一定会到100%的,除非你的主程序出错了。 |
怎么获取上传文件的路径保存到数据库,像给稻香老农的无组件上传第一版可以获得上传文件路径? |
http://www.5xsoft.com 这个网站根本就没链接点啊... |
他的网站好像要改版,可是好久没有动静了,估计忙别的去了。
点这个下载吧:
http://www.mytju.com/classCode/class_downCode.asp?ID=7 |
|