非常不错的上栽进度条,大家看看他是具体怎么实现的.

HFeiLin 2004-12-09 05:09:54
大家看下面这页面,页面下有三个信箱的演示登录地址,进去后在点写邮件,然后就可以试试他们写的上载文件功能,他们弄的上栽进度条效果确实不错,大家看看他们是怎么做的,然后看能不能用php结合javascript也弄一个类似的出来.

http://www.damail.cn/present.htm
...全文
421 点赞 收藏 21
写回复
21 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
uuq 2004-12-28
javascript可以实现。
用div来现。客户端每1秒读一次服务端。
服务端也是一个输出javascript的php程序,这个程序最好不要太大。
到javascrpt版,阿信个人网站看下。只要把他的进度改成动态就好了
回复
loswing 2004-12-28
sf
回复
binny0532 2004-12-28
看看!
回复
oolin 2004-12-28
ASP版有网友提供“Asp无组件上传带进度条演示及源码”http://community.csdn.net/Expert/TopicView.asp?id=3639445

不知道哪位熟悉ASP的可以把他改写成PHP。
回复
oolin 2004-12-28
关注,它在IE及firefox里都能正常使用.
回复
HFeiLin 2004-12-13
我想有这嫌疑,他用 sqwebmail.css 这名字.而sqwebmail是一个老外做的webmail.
回复
19840701 2004-12-12
这个邮件系统的原型
http://www.atmail.com/

不知道是不是 拿别人的东西来卖的

回复
ashchen 2004-12-10
以前研究无刷新聊天室 看过push技术,如下文所说,用的content-type:multipart/x-mixed-replace,这样没有完全生成就发送代码给客户端,所以
楼主说的那个上穿就是服务器端没有上穿完就不断地发送
类似<script>update("1.10MB", '21', '1分钟31秒');</script>给客户端,
这样Ie就能看到状态条在动并提示。
=================================================================
SERVER PUSH 之我见
---摘自网易
我不知道业内人士是如何理解SERVER PUSH这个概念的。也没有人真正把SERVER
PUSH的概念澄清。

据我所了解,SERVER PUSH是一种用CGI来演示动画的一种特殊支持。也就指X-MI
XED-REPLACE。可惜,这个功能只能在NS上实现,IE无法浏览到动画替换,只能堆
在后面。所以说过I E并不支持SERVER PUSH.

现在所谓的server push的聊天室,也就指无刷新的聊天室程序。在PERL中其实如
果用content-type:multipart/x-mixed-replace这种头,在IE和NS中就可以
实现程序没有运行完就可以输出结果,实现直接写屏。 其实把文件名改成 nph-
**.cgi 然后设置 $|=1;一样可以实现程序没有运行完就可以输出结果,实现直接
写屏的聊天室程序。

但是这样的聊天室消耗资源巨大,每一个用户就是新起一个进程,占用一定的cp
u和内存,如果人多起来是一个恶梦!我想,如果用 ISAPI 或者 FAST-CGI也许能
加快速度。

但是最理想的办法就是利用SOCKET来建立一个连接,SERVER不先主动关闭连接。
这样一样可以实现无刷屏的聊天室程序,而且占用资源小。目前的银沙,网易聊
天室都是这种类型的。所以才能有那么高的服务器客容量。

如果想写出真正好的聊天室程序,要涉及到很多方面,不单单是浏览器与服务器
的交互,要涉及到网络协议,操作系统,等等的知识。
回复
ezdevelop 2004-12-10
To xuzuning(唠叨)
http://www.zend.com/zend/week/pat/pat23.txt
回复
HFeiLin 2004-12-10
是呀,主要是这 /cgi-bin/process.pl?demo3@demo.damail.cn
但perl也只是一种语言,如果知道过程是怎么弄的,我想完全可以换成php的.

我看到他process.pl生成的代码如下:他不段的在结尾加上那javascript脚本.

<html><head></head>
<script language=javascript>
function update(val, used, remain) {
if ( val == 'done' ) {
me.innerHTML = "上载成功!";
document.all.used.style.width = '100%';
}
else {
me.innerHTML="已上载 " + val + " ( 剩余 " + remain + " )";
document.all.used.style.width = used + "%";
}
}
</script>

<style type="text/css">body { font-size: 12px; } td { font-size: 12px; }</style>
<body topmargin="5" leftmargin="15">
<div height="20" width="100%">正在上载附件......</div>
<span id="size">文件容量: 5.36MB</span><br>
<span id="me">Loading...</span>
<table cellspacing=0 cellpadding=0 border=0>
<TR><TD WIDTH=3%>0%</TD>
<TD WIDTH=94%>
<table style="BORDER: #104a7b 1px solid; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1px; PADDING-TOP: 1px;" cellSpacing="0" cellPadding="0" width="100%" border="0">
<tr><td width="100%">
<div id="used" style="FONT-SIZE: 5px; WIDTH: 0%; HEIGHT: 5px; BACKGROUND-COLOR: #e00505"></div>
</td></tr>
</table>
</TD>
<TD ALIGN=RIGHT>100%</TD>
</TR>
</table>
<div><img src="/images/timer.gif" border="0" align=absmiddle> 注意:网络速度影响上载快慢,剩余时间浮动属正常现象。</div>
<script>update("96.1KB", '2', '0分钟0秒');</script>
<script>update("144.1KB", '3', '1分钟51秒');</script>
<script>update("200.1KB", '4', '1分钟35秒');</script>
<script>update("232.1KB", '4', '2分钟44秒');</script>
<script>update("280.1KB", '5', '1分钟49秒');</script>
<script>update("336.1KB", '6', '1分钟32秒');</script>
<script>update("376.1KB", '7', '2分钟8秒');</script>
<script>update("408.1KB", '7', '2分钟39秒');</script>
<script>update("440.1KB", '8', '2分钟38秒');</script>
<script>update("488.1KB", '9', '1分钟44秒');</script>
<script>update("544.1KB", '10', '1分钟28秒');</script>
<script>update("592.1KB", '11', '1分钟42秒');</script>
<script>update("648.1KB", '12', '1分钟27秒');</script>
<script>update("696.1KB", '13', '1分钟40秒');</script>
<script>update("752.1KB", '14', '1分钟25秒');</script>
<script>update("808.1KB", '15', '1分钟24秒');</script>
<script>update("864.1KB", '16', '1分钟23秒');</script>
<script>update("920.1KB", '17', '1分钟22秒');</script>
<script>update("976.1KB", '18', '1分钟21秒');</script>
<script>update("1.00MB", '19', '1分钟20秒');</script>
<script>update("1.06MB", '20', '1分钟19秒');</script>
<script>update("1.10MB", '21', '1分钟31秒');</script>
回复
xuzuning 2004-12-10
正如 ashchen(陈辉) 所说,他使用了perl。
如果可能的话,你贴出process.pl的代码。看看是否能改写成php的

to ezdevelop(phpsalon.com) “新版本的PHP已实现了上载进度条的功能”
此话怎讲?
回复
ezdevelop 2004-12-10
新版本的PHP已实现了上载进度条的功能
回复
HFeiLin 2004-12-10
我想他们不会用到FTP,如果在页面里用FTP的话,是不是得用ActiveX控件或applet才能到达好的效果?

而http协议是无状态的,所以我想他们可能一开始获得文件大小,然后一直在刷新某个页面获得已经发送的数据数,这样就可以计算百分比.不知道是不是这样.但我觉得这样好象不好实现.

回复
hflsj 2004-12-09
学习一下
回复
jxyuhua 2004-12-09
学习一下
回复
ashchen 2004-12-09
php的机制是完成解析就退出,然后一次性把生成的html发给客户端,不存在拖延的问题,即使是sleep也没用。
所以对这个技术感兴趣的可以去看看perl并且搜索一下相关资料
回复
ashchen 2004-12-09
这个阿,以前研究过,perl写的,php很难实现,好像利用了一个http协议里的冬冬,不少聊天室用的这种技术,让浏览器等待服务器。
回复
cloudchen 2004-12-09
而且ftp必须得支持断点上传

如果是http上传,也应该是断点上传的,保持请求的http连接长时间有效,上传建立文件后返回文件句柄,然后能定时的返回已上传的字节数

不知道有什么方式能实现http的断点上传?
回复
cloudchen 2004-12-09
界面不错很好看,进度条的效果实现也很简单

一个table的td里面放了一个有背景色的div来实现进度条,控制div的宽度,用百分比控制

这个上传过程中最重要的就是在文件还没上传完成时就先获得了文件的总字节数,然后上传的时候请求的页面边上传边先向浏览器echo已经上传完成的字节数(加上前面的总字节数,这样就能算出上传的百分比)

我没做过这样的上传程序,就是在边上传边返回已完成的字节数,我觉得单用php的上传功能是不能实现这个效果的。
ftp上传应该是可以达到这样的效果的,没猜错的话应该是用ftp上传的。

http上传似乎是没办法在单次请求中返回已上传的字节数的

或许有其他办法,大家交流一下,java里好象也能实现这样的功能,谁能介绍一下?
回复
genshing 2004-12-09
关注~
回复
加载更多回复
相关推荐
发帖
基础编程
创建于2007-09-28

2.1w+

社区成员

从PHP安装配置,PHP入门,PHP基础到PHP应用
申请成为版主
帖子事件
创建了帖子
2004-12-09 05:09
社区公告
暂无公告