FLASH+PHP实现文件上传

来源:互联网 发布:淘宝 强光手电筒 编辑:程序博客网 时间:2024/05/17 20:11

SWF里的ActionScript代码

AS Code
import flash.net.FileReference;import mx.controls.Alert;System.useCodepage = true;var allTypes:Array = new Array ();// 文件类型var textTypes:Object = new Object ();textTypes.description = "Text Files (*.txt)";textTypes.extension = "*.txt";allTypes.push (textTypes);var host:String = "http://www.4nothing.net/flashexample/as-php/";var listener:Object = new Object ();// 当选中文件时listener.onSelect = function (file:FileReference):Void {if (file.size > 1024 * 1024){errLog ("文件超过了1M");path_txt.text = "请先选择要上传的文件";return;}path_txt.text = "你选择的文件是 [" + file.name + "]";upload_btn.enabled = true;};// 当取消时listener.onCancel = function (file:FileReference):Void {path_txt.text = "请先选择要上传的文件";upload_btn.enabled = false;};// 上传开始时调用listener.onOpen = function (file:FileReference):Void {showResult (false);browse_btn.enabled = false;upload_btn.enabled = false;my_pb.setProgress (0, 0);};// 上传中listener.onProgress = function (file:FileReferencebytesLoaded:NumberbytesTotal:Number):Void {my_pb.setProgress (bytesLoadedbytesTotal);};// 结束listener.onComplete = function (file:FileReference):Void {browse_btn.enabled = true;upload_btn.enabled = true;view_btn._visible = true;};// HTTP错误listener.onHTTPError = function (file:FileReference):Void {errLog ("onHTTPError: " + file.name);};// IO错误listener.onIOError = function (file:FileReference):Void {errLog ("onIOError: " + file.name);};// 安全限制listener.onSecurityError = function (file:FileReference, errorString:String):Void {errLog ("onSecurityError: " + file.name + " errorString: " + errorString);};// 用户浏览和上传按钮的监听对象var browseObj:Object = new Object ();browseObj.click = function (){fileRef.browse (allTypes);};var uploadObj:Object = new Object ();uploadObj.click = function (){if (!fileRef.upload (host + "upload.php")){errLog ("Upload dialog failed to open.");}};// 查看文件内容var my_lv:LoadVars = new LoadVars ();my_lv.onLoad = function (success){if (success){trace ("ok");trace (this["content"]);if (Number (this["code"]) == 1){content_txt._visible = true;content_txt.text = this["content"];}else{errLog ("获取信息失败!");}}else{trace ("error");errLog ("获取信息失败le!");}view_btn.enabled = true;browse_btn.enabled = true;upload_btn.enabled = true;};var viewObj:Object = new Object ();viewObj.click = function (){view_btn.enabled = false;browse_btn.enabled = false;upload_btn.enabled = false;my_lv.load (host+"checkfile.php?filename=" + fileRef.name + "&time=" + getDateStr ());};function getDateStr ():String{return new Date ().toString ();}var fileRef:FileReference = new FileReference ();// 隐藏查看按钮和内容面板function showResult (flag:Boolean){view_btn._visible = false;content_txt._visible = false;}// 错误提示function errLog (msg:String){Alert.show (msg, "出错了!"Alert.OK);}function init (){// 添加监听器fileRef.addListener (listener);browse_btn.addEventListener ("click", browseObj);upload_btn.addEventListener ("click", uploadObj);view_btn.addEventListener ("click", viewObj);path_txt.editable = false;path_txt.text = "请先选择要上传的文件";// 进度条信息my_pb.mode = "manual";my_pb.label = "上传进度:%1 / %2 字节";my_pb.labelPlacement = "top";upload_btn.enabled = false;showResult (false);}stop ();init ();

因为基本都是使用的组件,所以使用的addEventListener比较多.不过难度并不大.

服务器端php代码

upload.php

PHP Code
error_reporting(E_ALL ^ E_NOTICE);/**   *通过SWF上传来的文件具有如下结构  *$_FILES['Filedata']-->名称都是Filedata,注意大小写  *$_FILES['Filedata']['name']-->上传的文件名,包括扩展名  *$_FILES['Filedata']['type']-->文件类型,不要把它跟文件扩展名混为一谈,另外这项内容不一定可用。  *$_FILES['Filedata']['tmp_name']-->保存在服务器上的临时文件名。因为PHP会把上传的文件先保存在临时文件夹内  *$_FILES['Filedata']['size']-->已上传文件大小  *$_FILES['Filedata']['error']-->出现的错误 */$file = $_FILES['Filedata'];// 直接访问本页面而没有上传文件时退出if(empty($file)){exit();}$name = $file['name'];// 获取扩展名$ext = strrchr($name,'.');if($ext === false){exit();}// 限定为txtif($ext != ".txt"){exit();} //检查文件大小if($file['size'] > 1024 * 1024){exit();}// 保存路径$uploaddir = './upload/';// 实际保存的文件信息$uploadfile = $uploaddir . basename($name);move_uploaded_file($file['tmp_name'], $uploadfile);
原创粉丝点击