界面不错很好看,进度条的效果实现也很简单一个table的td里面放了一个有背景色的div来实现进度条,控制div的宽度,用百分比控制这个上传过程中最重要的就是在文件还没上传完成时就先获得了文件的总字节数,然后上传的时候请求的页面边上传边先向浏览器echo已经上传完成的字节数(加上前面的总字节数,这样就能算出上传的百分比)我没做过这样的上传程序,就是在边上传边返回已完成的字节数,我觉得单用php的上传功能是不能实现这个效果的。
ftp上传应该是可以达到这样的效果的,没猜错的话应该是用ftp上传的。http上传似乎是没办法在单次请求中返回已上传的字节数的或许有其他办法,大家交流一下,java里好象也能实现这样的功能,谁能介绍一下?

解决方案 »

  1.   

    而且ftp必须得支持断点上传如果是http上传,也应该是断点上传的,保持请求的http连接长时间有效,上传建立文件后返回文件句柄,然后能定时的返回已上传的字节数不知道有什么方式能实现http的断点上传?
      

  2.   

    这个阿,以前研究过,perl写的,php很难实现,好像利用了一个http协议里的冬冬,不少聊天室用的这种技术,让浏览器等待服务器。
      

  3.   

    php的机制是完成解析就退出,然后一次性把生成的html发给客户端,不存在拖延的问题,即使是sleep也没用。
    所以对这个技术感兴趣的可以去看看perl并且搜索一下相关资料
      

  4.   

    我想他们不会用到FTP,如果在页面里用FTP的话,是不是得用ActiveX控件或applet才能到达好的效果?而http协议是无状态的,所以我想他们可能一开始获得文件大小,然后一直在刷新某个页面获得已经发送的数据数,这样就可以计算百分比.不知道是不是这样.但我觉得这样好象不好实现.
      

  5.   

    新版本的PHP已实现了上载进度条的功能
      

  6.   

    正如 ashchen(陈辉) 所说,他使用了perl。
    如果可能的话,你贴出process.pl的代码。看看是否能改写成php的to ezdevelop(phpsalon.com) “新版本的PHP已实现了上载进度条的功能”
    此话怎讲?
      

  7.   

    是呀,主要是这 /cgi-bin/[email protected] 
    但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>&nbsp;注意:网络速度影响上载快慢,剩余时间浮动属正常现象。</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>
      

  8.   

    To xuzuning(唠叨)
    http://www.zend.com/zend/week/pat/pat23.txt
      

  9.   

    以前研究无刷新聊天室 看过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不先主动关闭连接。
    这样一样可以实现无刷屏的聊天室程序,而且占用资源小。目前的银沙,网易聊
    天室都是这种类型的。所以才能有那么高的服务器客容量。如果想写出真正好的聊天室程序,要涉及到很多方面,不单单是浏览器与服务器 
    的交互,要涉及到网络协议,操作系统,等等的知识。
      

  10.   

    这个邮件系统的原型
    http://www.atmail.com/不知道是不是 拿别人的东西来卖的
      

  11.   

    我想有这嫌疑,他用 sqwebmail.css 这名字.而sqwebmail是一个老外做的webmail.
      

  12.   

    关注,它在IE及firefox里都能正常使用.
      

  13.   

    ASP版有网友提供“Asp无组件上传带进度条演示及源码”http://community.csdn.net/Expert/TopicView.asp?id=3639445不知道哪位熟悉ASP的可以把他改写成PHP。
      

  14.   

    javascript可以实现。
    用div来现。客户端每1秒读一次服务端。
    服务端也是一个输出javascript的php程序,这个程序最好不要太大。
    到javascrpt版,阿信个人网站看下。只要把他的进度改成动态就好了