SWF里的ActionScript代码
AS Codeimport 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:FileReference, bytesLoaded:Number, bytesTotal:Number):Void { my_pb.setProgress (bytesLoaded, bytesTotal); }; // 结束 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 Codeerror_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(); } // 限定为txt if($ext != ".txt") { exit(); } //检查文件大小 if($file['size'] > 1024 * 1024) { exit(); } // 保存路径 $uploaddir = './upload/'; // 实际保存的文件信息 $uploadfile = $uploaddir . basename($name); move_uploaded_file($file['tmp_name'], $uploadfile);