文件上传之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插件的全部内容,希望大家喜欢。