1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > lighttpd+flash+PHP大文件上传 带上传进度显示

lighttpd+flash+PHP大文件上传 带上传进度显示

时间:2022-05-06 03:48:10

相关推荐

lighttpd+flash+PHP大文件上传 带上传进度显示

相信每个做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 ("/upload.php")方法能够将文件发送到服务器上, 然后由upload.php通过$_FILES['Filedata'] 将临时文件转移到发布目录。

此类实现的事件如下:

通过 progress 事件,能够获取文件上传进度,其属性值包括:

具体代码如下:

.FileReference;

varurl:URLRequest=newURLRequest();

url.url="http://172.16.6.245:88/upload.php";

varfileRef:FileReference=newFileReference();

fileRef.addEventListener(Event.SELECT,selectHandler);

fileRef.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);

fileRef.addEventListener(ProgressEvent.PROGRESS,progressHandler);

fileRef.addEventListener(PLETE,completeHandler);

fileRef.browse();

functionselectHandler(event:Event):void

{

fileRef=FileReference(event.target);

trace("onSelect:"+fileRef.name);

fileRef.upload(url);

}

functionioErrorHandler(event:IOErrorEvent):void

{

trace("ioErrorHandler:"+event);

}

functionprogressHandler(event:ProgressEvent):void

{

trace("progressHandler:name="+fileRef.name+"bytesLoaded="+event.bytesLoaded+"bytesTotal="+event.bytesTotal);

}

functioncompleteHandler(event:Event):void

{

trace("completeHandler:name="+fileRef.name+"uploadsuccess!!");

}

注意:进度控制等信息我都放到了控制台,我的源程序和UI效果并不是这样的,主要是为了方便网友调试网友可根据自己的需要调整程序。

FLASH 效果图:

(1)初始效果:

(2)选择文件:

(3)开始上传

是不是相当像优酷网的视频上传哈!!

二、服务端脚本(PHP):

服务端文件处理的脚本很简单了,我就不多讲了,下面是我的源代码,安全这方面没做过多控制,大家自己把握哈。

<? php

$upload_dir = " /var/www/html/test/upload " ;

$attachment = $_FILES [ ' Filedata ' ];

$filename = $attachment [ ' name ' ];

$fileext = substr ( strrchr ( $filename , ' . ' ) , 1 );

$path = $upload_dir . " / " . my_rand( 15 ) . " . " . $fileext ;

move_uploaded_file ( $attachment [ ' tmp_name ' ] , $path );

function my_rand( $length ){

$chars = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 " ;

$end = strlen ( $chars ) - 1 ;

for ( $i = 0 ; $i < $length ; $i ++ ){

$hash .= $chars [ mt_rand ( 0 , $end )];

}

return $hash ;

}

?>

三、lighttpd 服务器

众所周知, Lighttpd是一个德国人领导的开源软件,其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的web server环境。其虽没有apache 功能那么强大,其优势在于快速、安全。(国外很出名的视频网站,被google 天价16.5亿收购了)就是在lighttpd 上构建的,还有很多网站的图片服务器也是它。

使用lighttpd 来处理大文件的上传,能够在一定程度上降低apache 服务的负荷,增强其负载能力。

lighttpd 能和PHP 以CGI 或 FASTCGI 两种方式结合:

我采用的是CGI,因为fastcgi 的安装还要重新编译PHP :

(1) fastcgi

$ ./ configure

-- enable - fastcgi

-- enable - discard - path

-- enable - force - cgi - redirect编译之后,使用# php -v

可以看到版本信息中含有 eAccelerator ,这表明PHP安装成功。

(2) cgi

修改 lighttpd.conf配置文件

第一处: cgi.assign = ( ".php" => "/usr/bin/php-cgi")

第二处: server.modules 中的 "mod_cgi" 的行注释删除。

关于 lighttpd 和 php 配置的问题我就不详细叙述了,网上一搜一大把。。。

就此为止了,大家有啥问题,可以邮件给我,我会尽力帮大家解决的。。

邮箱: fhc_9980@

源文件下载地址:

/source/752977

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。