相信每个做web的程序员都曾经被large file 的上传困扰过,这个问题的出现是由于(1)网络带宽不足(或是网络不稳定)如果是在局域网内呢,呵呵^_^,目前大多数用户的带宽还较为有限。(2)HTTP 协议自身的问题,HTTP 全称是超文本传输协议(Hypertext Transfer Protocol),不是为了传输文件设计的。文件传输首选当然是FTP (File Transfer Protocol)。
优酷网 大家都很熟悉吧,是做视频点播的网站,很多视频都是网友上传的,视频文件都很大。他们的文件上传使用的flash,特别酷,能够显示文件上传的进度。初见感觉很神奇,一直想自己实现一把,但是始终没有机会。这段时间有机会尝试了。。。
废话不说了,开始正题:
首先要有一个有效的开发工具,“工欲善其事,必先利其器”么,我用的是Adobe 去年刚出的Flash CS3 试用版,界面很炫,支持ActionScript 3。
一 : FLASH UPLOAD:
使用 fileReference 类,此功能是期待已久的。FileReference 类提供了在用户计算机和服务器之间上载和下载文件的方法,在上载期间通过 fileReference.browse() 方法浏览和选择本地文件 ;使用 fileReference.upload ("http://test.test.com/upload.php")方法能够将文件发送到服务器上, 然后由upload.php 通过 $_FILES['Filedata'] 将临时文件转移到发布目录。
此类实现的事件如下:
摘要 | 定义方 | |
---|---|---|
Flash Player 获得操作系统焦点并变为活动状态时调度。 | EventDispatcher | |
当用户通过文件浏览对话框取消文件上载或下载时调度。 | FileReference | |
当下载操作完成或上载操作生成 HTTP 状态代码 200 时调度。 | FileReference | |
Flash Player 失去操作系统焦点并变为非活动状态时调度。 | EventDispatcher | |
当上载失败并且存在可用来描述失败的 HTTP 状态代码时调度。 | FileReference | |
当上载或下载失败时调度。 | FileReference | |
当上载或下载操作开始时调度。 | FileReference | |
在文件上载或下载操作期间定期调度。 | FileReference | |
当对 FileReference.upload() 或 FileReference.download() 方法的调用尝试将文件上载到调用方安全沙箱外部的服务器,或是从调用方安全沙箱外部的服务器上下载文件时进行调度。 | FileReference | |
当用户从文件浏览对话框选择要上载或下载的文件时调度。 | FileReference | |
成功上载并从服务器接收数据之后调度。 | FileReference |
通过 progress 事件,能够获取文件上传进度,其属性值包括:
属性 | 值 |
---|---|
bubbles | false |
bytesLoaded | 在侦听器处理事件时加载的项数或字节数。 |
bytesTotal | 如果加载进程成功,最终将加载的项目或字节总数。 |
cancelable | false ;没有要取消的默认行为。 |
currentTarget | 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
target | 报告进度的网络对象。 |
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
注意:进度控制等信息我都放到了控制台,我的源程序和UI效果并不是这样的,主要是为了方便网友调试网友可根据自己的需要调整程序。
FLASH 效果图:
(1)初始效果:
(2)选择文件:
(3)开始上传
是不是相当像优酷网的视频上传哈!!
二、服务端脚本(PHP):
服务端文件处理的脚本很简单了,我就不多讲了,下面是我的源代码,安全这方面没做过多控制,大家自己把握哈。
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
三、lighttpd 服务器
众所周知, Lighttpd是一个德国人领导的开源软件,其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的web server环境。其虽没有apache 功能那么强大,其优势在于快速、安全。www.youtube.com (国外很出名的视频网站,被google 天价16.5亿收购了)就是在lighttpd 上构建的,还有很多网站的图片服务器也是它。
使用lighttpd 来处理大文件的上传,能够在一定程度上降低apache 服务的负荷,增强其负载能力。
lighttpd 能和PHP 以CGI 或 FASTCGI 两种方式结合:
我采用的是CGI,因为fastcgi 的安装还要重新编译PHP :
(1) fastcgi
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
可以看到版本信息中含有 eAccelerator ,这表明PHP安装成功。
(2) cgi
修改 lighttpd.conf 配置文件
第一处: cgi.assign = ( ".php" => "/usr/bin/php-cgi")
第二处: server.modules 中的 "mod_cgi" 的行注释删除。
关于 lighttpd 和 php 配置的问题我就不详细叙述了,网上一搜一大把。。。
就此为止了,大家有啥问题,可以邮件给我,我会尽力帮大家解决的。。
邮箱: fhc_9980@163.com
http://download.csdn.net/source/752977