文件上传之SWFUpload插件(代码)
下面通过一段代码给大家演示下,主要分为1.前台文件index.html和2.后台文件upload.php。具体代码如下所示:
1.前台文件index.html
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<metahttp-equiv="Content-Type"content="text/html;charset=gb2312"/>
<head>
<title>SWFUpload</title>
<linkhref="css/default.css"rel="stylesheet"type="text/css"/>
<!--Swfupload插件begin-->
<scripttype="text/javascript"src="swfupload/swfupload.js"></script>
<scripttype="text/javascript"src="js/swfupload.queue.js"></script>
<scripttype="text/javascript"src="js/fileprogress.js"></script>
<scripttype="text/javascript"src="js/handlers.js"></script>
<!--Swfupload插件end-->
<scripttype="text/javascript">
varswfu;
window.onload=function(){
varsettings={
flash_url:"swfupload/swfupload.swf",
upload_url:"upload.php",//后台文件
post_params:{"PHPSESSID":"<?phpechosession_id();?>"},
file_size_limit:"100MB",
file_types:"*.*",
file_types_description:"AllFiles",
file_upload_limit:100,
file_queue_limit:0,
custom_settings:{
progressTarget:"fsUploadProgress",
cancelButtonId:"btnCancel"
},
debug:false,
//按钮设置
button_image_url:"images/TestImageNoText_65x29.png",//Flash样式图片文件
button_width:"65",
button_height:"29",
button_placeholder_id:"spanButtonPlaceHolder",
button_text:'<spanclass="theFont">浏览</span>',
button_text_style:".theFont{font-size:16;}",
button_text_left_padding:12,
button_text_top_padding:3,
//句柄设置
file_queued_handler:fileQueued,
file_queue_error_handler:fileQueueError,
file_dialog_complete_handler:fileDialogComplete,
upload_start_handler:uploadStart,
upload_progress_handler:uploadProgress,
upload_error_handler:uploadError,
upload_success_handler:uploadSuccess,
upload_complete_handler:uploadComplete,
queue_complete_handler:queueComplete
};
swfu=newSWFUpload(settings);
};
</script>
</head>
<body>
<divid="header">
<h1id="logo"><ahref="/">SWFUpload</a></h1>
<divid="version">v2.2.0</div>
</div>
<divid="content">
<formid="form1"action="index.php"method="post"enctype="multipart/form-data">
<p>点击“浏览”按钮,选择您要上传的文档文件后,系统将自动上传并在完成后提示您。</p>
<p>请勿上传包含中文文件名的文件!</p>
<divclass="fieldsetflash"id="fsUploadProgress">
<spanclass="legend">快速上传</span>
</div>
<divid="divStatus">0个文件已上传</div>
<div>
<spanid="spanButtonPlaceHolder"></span>
<inputid="btnCancel"type="button"value="取消所有上传"onclick="swfu.cancelQueue();"disabled="disabled"style="margin-left:2px;font-size:8pt;height:29px;"/>
</div>
</form>
</div>
<divalign="center">HanizationBy<ahref="http://imll.net"target="_blank">Leo.C,</a>
</div>
</body>
</html>
2.后台文件upload.php
<?php
//传递session值(由于Flash与session不兼容,只能通过参数传递获取)
if(isset($_POST["PHPSESSID"])){
session_id($_POST["PHPSESSID"]);
}elseif(isset($_GET["PHPSESSID"])){
session_id($_GET["PHPSESSID"]);
}
session_start();
//设置POST最大值
$POST_MAX_SIZE=ini_get('post_max_size');
$unit=strtoupper(substr($POST_MAX_SIZE,-1));
$multiplier=($unit=='M'?1048576:($unit=='K'?1024:($unit=='G'?1073741824:1)));
if((int)$_SERVER['CONTENT_LENGTH']>$multiplier*(int)$POST_MAX_SIZE&&$POST_MAX_SIZE){
header("HTTP/1.1500InternalServerError");
echo"POSTexceededmaximumallowedsize.";
exit(0);
}
//基本设置
$save_path=getcwd()."/file/";//文件上传位置
$upload_name="Filedata";
$max_file_size_in_bytes=2147483647;//2GB
$extension_whitelist=array("doc","txt","jpg","gif","png");//允许文件类型
$valid_chars_regex='.A-Z0-9_!@#$%^&()+={}\[\]\',~`-';//文件名规则
//其他变量
$MAX_FILENAME_LENGTH=260;
$file_name="";
$file_extension="";
$uploadErrors=array(
0=>"文件上传成功",
1=>"上传的文件超过了php.ini文件中的upload_max_filesizedirective里的设置",
2=>"上传的文件超过了HTMLform文件中的MAX_FILE_SIZEdirective里的设置",
3=>"上传的文件仅为部分文件",
4=>"没有文件上传",
6=>"缺少临时文件夹"
);
//检测文件是否上传正确
if(!isset($_FILES[$upload_name])){
HandleError("Nouploadfoundin\$_FILESfor".$upload_name);
exit(0);
}elseif(isset($_FILES[$upload_name]["error"])&&$_FILES[$upload_name]["error"]!=0){
HandleError($uploadErrors[$_FILES[$upload_name]["error"]]);
exit(0);
}elseif(!isset($_FILES[$upload_name]["tmp_name"])||!@is_uploaded_file($_FILES[$upload_name]["tmp_name"])){
HandleError("Uploadfailedis_uploaded_filetest.");
exit(0);
}elseif(!isset($_FILES[$upload_name]['name'])){
HandleError("Filehasnoname.");
exit(0);
}
//检测文件尺寸
$file_size=@filesize($_FILES[$upload_name]["tmp_name"]);
if(!$file_size||$file_size>$max_file_size_in_bytes){
HandleError("Fileexceedsthemaximumallowedsize");
exit(0);
}
if($file_size<=0){
HandleError("Filesizeoutsideallowedlowerbound");
exit(0);
}
//检测文件名字为空
$file_name=preg_replace('/[^'.$valid_chars_regex.']|\.+$/i',"",basename($_FILES[$upload_name]['name']));
if(strlen($file_name)==0||strlen($file_name)>$MAX_FILENAME_LENGTH){
HandleError("Invalidfilename");
exit(0);
}
//检测重名文件
if(file_exists($save_path.$file_name)){
HandleError("Filewiththisnamealreadyexists");
exit(0);
}
//检测后缀名
$path_info=pathinfo($_FILES[$upload_name]['name']);
$file_extension=$path_info["extension"];
$is_valid_extension=false;
foreach($extension_whitelistas$extension){
if(strcasecmp($file_extension,$extension)==0){
$is_valid_extension=true;
break;
}
}
if(!$is_valid_extension){
HandleError("Invalidfileextension");
exit(0);
}
//保存文件
if(!@move_uploaded_file($_FILES[$upload_name]["tmp_name"],$save_path.$file_name)){
HandleError("文件无法保存.");
exit(0);
}
//成功输出
echo"FileReceived";
exit(0);
functionHandleError($message){
header("HTTP/1.1500InternalServerError");
echo$message;
}
?>
以上代码就是实现文件上传之SwFUpload插件的全部内容,希望大家喜欢。