可以做电影网站的主机,免费矢量图素材网,网站建设学多长时间,网站开发 h5 h4之前有朋友给我发送email#xff0c;询问我是否有单个文件上传的源代码#xff0c;因为当时写这个好像是在09年#xff0c;所以放哪了一时也没找着。后来整理硬盘的时候#xff0c;找到了源码#xff0c;所以决定来个汇总#xff08;之前写过的关于flashjs上传文件的例子… 之前有朋友给我发送email询问我是否有单个文件上传的源代码因为当时写这个好像是在09年所以放哪了一时也没找着。后来整理硬盘的时候找到了源码所以决定来个汇总之前写过的关于flashjs上传文件的例子 1、定位flash上传出现IO Error #2038的错误 2、as3php上传图片的三种方式 3、as3与php 上传单个图片demo 4、as3与php 上传多张图片demo 5、51JS上的“[原创] flash单个文件上传代码示例” 在这里面我决定把所有的源码html、js、php、fla、as3以及使用说明一并打包并直接提供下载。 先还是讲一下flash按钮的控制问题 1)、需要三张图片新建一个影片剪辑也就是按钮的三种状态正常、hover、disabled如下图所示三种状态的图片分别位于第一帧、第二帧和第三帧每一帧上写上脚本stop()) 2)、在库中右击选中刚刚的btn(影片剪辑)然后右击选择“属性”勾选“为第一帧导出”以及“为ActionScript导出“如图所示 3)、编写类UploadButtonCom类它继承于基类MovieClip目的是为了方便调用者直接调用一个方法便可很方便地控制按钮的状态比如mouseover、mouseout等 UploadButtonCom类的完整代码如下 1: package 2: { 3: import flash.display.MovieClip; 4: import flash.events.MouseEvent; 5: 6: public class UploadButtonCom extends MovieClip 7: { 8: public function UploadButtonCom() 9: { 10: super(); 11: init(); 12: } 13: 14: private function init():void 15: { 16: enabledButton(); 17: this.addEventListener(MouseEvent.MOUSE_OVER , overHandle); 18: this.addEventListener(MouseEvent.MOUSE_OUT , outHandle) 19: } 20: 21: private function overHandle(e:MouseEvent):void 22: { 23: this.gotoAndStop(2) 24: } 25: 26: private function outHandle(e:MouseEvent):void 27: { 28: this.gotoAndStop(1) 29: } 30: 31: public function disenable():void 32: { 33: this.gotoAndStop(3); 34: this.buttonMode false 35: this.mouseChildren false; 36: this.mouseEnabled false 37: } 38: 39: public function enabledButton():void 40: { 41: this.gotoAndStop(1); 42: this.buttonMode true 43: this.mouseChildren true; 44: this.mouseEnabled true 45: } 46: } 47: } 提供给外部仅二个方法来控制按钮是否可以被点击。 4)、从库中将“按钮”这个MovieClip拖至舞台中指定一个名称“btn_mc“编写一个文档类“UploadFile.as” 1: package 2: { 3: import flash.display.MovieClip; 4: import flash.events.DataEvent; 5: import flash.events.Event; 6: import flash.events.IOErrorEvent; 7: import flash.events.MouseEvent; 8: import flash.events.ProgressEvent; 9: import flash.external.ExternalInterface; 10: import flash.net.FileFilter; 11: import flash.net.FileReference; 12: import flash.net.URLRequest; 13: import flash.text.TextField; 14: 15: public class UploadFile extends MovieClip 16: { 17: public function UploadFile() 18: { 19: super(); 20: init(); 21: } 22: 23: private var tipTxt:TextField; 24: private var uploadButton:UploadButtonCom; 25: 26: private var file:FileReference; 27: private var fileType:String *.*; 28: private var fileTypeStr:String All Files 29: private var fileMaxSize:Number 10*1024; 30: private var uploadURL:String ; 31: private static var CALL_FUNCTION_NAME SWFSingleUpload.instance.; 32: 33: private function init():void 34: { 35: tipTxt this.txt_mc; 36: tipTxt.mouseEnabled false; 37: tipTxt.mouseWheelEnabled false; 38: tipTxt.selectable false; 39: 40: uploadButton this.btn_mc; 41: uploadButton.addEventListener(MouseEvent.CLICK , browseFile); 42: 43: addJScall(); 44: this.addEventListener(Event.ADDED_TO_STAGE , createComplete); 45: 46: file new FileReference(); 47: file.addEventListener(Event.SELECT, selectHandler); 48: file.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); 49: file.addEventListener(ProgressEvent.PROGRESS, progressHandler); 50: file.addEventListener(Event.COMPLETE, completeHandler); 51: file.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,dataHandler); 52: } 53: 54: private function createComplete(e:Event):void 55: { 56: ExternalInterface.call(CALL_FUNCTION_NAME initComplete); 57: } 58: 59: private function addJScall():void 60: { 61: ExternalInterface.addCallback(setValue,setValue); 62: } 63: 64: private function setValue(t:String,_fileType:String,_fileTypeStr:String,fileMax:Number,url:String):void 65: { 66: tipTxt.htmlText t; 67: fileMaxSize fileMax; 68: fileType _fileType; 69: fileTypeStr _fileTypeStr; 70: uploadURL url; 71: } 72: 73: private function startUploadFile():void 74: { 75: if(file.size/1024 fileMaxSize) 76: { 77: ExternalInterface.call(CALL_FUNCTION_NAME limitError,文件超出最大限制); 78: return ; 79: } 80: ExternalInterface.call(CALL_FUNCTION_NAME startUpload); 81: uploadButton.disenable(); 82: var uploadReq:URLRequest new URLRequest(uploadURL) 83: file.upload(uploadReq); 84: } 85: 86: private function selectHandler(e:Event):void 87: { 88: startUploadFile(); 89: } 90: 91: private function browseFile(e:Event):void 92: { 93: var fileFilter:FileFilter new FileFilter(fileTypeStr, fileType); 94: file.browse([fileFilter]); 95: } 96: 97: private function ioErrorHandler(e:IOErrorEvent):void 98: { 99: ExternalInterface.call(CALL_FUNCTION_NAME ioError,e.text); 100: uploadButton.enabledButton(); 101: } 102: 103: private function progressHandler(event:ProgressEvent):void 104: { 105: ExternalInterface.call(CALL_FUNCTION_NAME progress,event.bytesLoaded,event.bytesTotal); 106: } 107: 108: private function completeHandler(e:Event):void 109: { 110: ExternalInterface.call(CALL_FUNCTION_NAME uploadComplete); 111: uploadButton.enabledButton(); 112: } 113: 114: private function dataHandler(data:DataEvent):void 115: { 116: ExternalInterface.call(CALL_FUNCTION_NAME uploadSuccess,data.data); 117: } 118: } 119: } 之后我在此基本上封装了一层写了一个名为“swf_single_upload.js”的JS文件主要目的是为了方便调用者使用它。 主要包含如下内容 函数定义(仅提供给网页调用的接口与flash无关) new SWFSingleUpload({ flash_url : ,//上传文件的URL地址 upload_url : ,//文件上传的目标地址 post_params : ,//传递的参数 file_size_limit : ,//文件上限默认为10*1024(以字节为单位) file_types : ,//文件类型以;进行分隔例如*.jpg;*.png file_types_description : ,//文件上传的描述文字例如图片 debug : true,//是否显示调试信息 upload_panel_id : ,//上传按钮放置的文件 upload_btn_text : ,//上传按钮的文字 upload_loaded_handler : ,//上传组件初始化完成 upload_start_handler : ,//开始上传的处理方法 upload_progress_handler : ,//正在上传时的方法 upload_complete_handler : ,//上传完成的方法 upload_success_handler : ,//上传成功的方法 upload_error_handler : //上传发生错误调用的方法 ); 总共有15个参数 获取组件的版本号SWFSingleUpload.version 获取组件实例对象SWFSingleUpload.instance指向实例本身 组件当前swf对象this.swfObject 其它全部采用回调的机制进行操作其中错误信息有 、超过指定的大小 、其它的IO错误例如404或是其它 Flash与JS调用的方法说明 Flash调用JS以SWFSingleUpload.instance.方法名开头 默认限制上传文件类型为*.* 说明为All Files 最大上传的文件大小为10*1024字节 Flash提供setValue方法给JS调用以便传入上述参数。 this.addEventListener(Event.ADDED_TO_STAGE,createComplete);//flash初始化完成 flash调用JS的四个方法 //文件超出最大上限 ExternalInterface.call(CALL_FUNCTION_NAME limitError,文件超出最大限制); //上传进度 ExternalInterface.call(CALL_FUNCTION_NAME,progress,event.bytesLoaded,event.bytesTotal); //上传完成 ExternalInterface.call(CALL_FUNCTION_NAME uploadComplete); //上传成功 ExternalInterface.call(CALL_FUNCTION_NAME,uploadSuccess,data.data); //上传出现IO错误 ExternalInterface.call(CALL_FUNCTION_NAME ioError,e.text); 页面正常运行选择文件以图片为例示意图如下 本想在新浪的SAE上部署测试一下可是上传那一块失败了也就没再继续折腾下去了。还是放一个地址在线查看示例 本示例中所有完整的源代码下载 未经本人授权本文谢绝转载。