[原]as3 flash web 应用 (1) 批量上传之Adobe官方FileReferenc
发布时间:2020-12-15 06:46:55 所属栏目:百科 来源:网络整理
导读:2010年06月06日 星期日 17:24 搬离写了5年的渣度空间,准备把技术性的文章定在CSDN了。这些都是文章备份。勿怪。。 (鉴于最近有些抓取机器和抄袭者,把标题的【原】字都复制,我不得不声明:本文为 yukon12345原创,转载请注明出处 http://blog.csdn.net/yu
2010年06月06日 星期日 17:24 搬离写了5年的渣度空间,准备把技术性的文章定在CSDN了。这些都是文章备份。勿怪。。 (鉴于最近有些抓取机器和抄袭者,把标题的【原】字都复制,我不得不声明:本文为 yukon12345原创,转载请注明出处 http://blog.csdn.net/yukon12345) 最近想山寨一下百度的各项功能,比如图片上传,音乐播放器,相册,动感相册,文章编辑器。一个一个来。哈哈。 package { import flash.display.Sprite; import flash.events.*; import flash.net.FileReference; import flash.net.FileReferenceList; public class FileReferenceListExample extends Sprite { public static var LIST_COMPLETE:String = "listComplete";//定义一个静态变量,用以标示所有文件传完后的事件 public function FileReferenceListExample() {//构造函数 bb.addEventListener(MouseEvent.MOUSE_DOWN,onBuClick)//在fla中随便新建一个按钮,属性面板中实例名设置为bb } private function onBuClick(e:Event){ initiateFileUpload(); } private function initiateFileUpload():void { var fileRef:CustomFileReferenceList = new CustomFileReferenceList();//实例化下面的包外类 fileRef.addEventListener(FileReferenceListExample.LIST_COMPLETE,listCompleteHandler); fileRef.browse(fileRef.getTypes());//打开上传对话框,fileRef.getTypes()为获取允许类型数组 } private function listCompleteHandler(event:Event):void { trace("listCompleteHandler"); } } } //包外类 import flash.events.*; import flash.net.FileReference; import flash.net.FileReferenceList; import flash.net.FileFilter; import flash.net.URLRequest; class CustomFileReferenceList extends FileReferenceList {//包外类CustomFileReferenceList private var uploadURL:URLRequest; private var pendingFiles:Array;//待加文件数组 public function CustomFileReferenceList() {//构造函数 uploadURL = new URLRequest(); uploadURL.url = "http://127.0.0.1/upload/up.php";//发送数据到处理地址 initializeListListeners(); } private function initializeListListeners():void { addEventListener(Event.SELECT,selectHandler);//上传对话框按下确定按钮后 addEventListener(Event.CANCEL,cancelHandler);//上传对话框取消按钮后 } public function getTypes():Array {//返回允许类型数组 var allTypes:Array = new Array(); allTypes.push(getImageTypeFilter()); allTypes.push(getTextTypeFilter()); return allTypes; } private function getImageTypeFilter():FileFilter {//FileFilter类。(1.说明文字,2允许后缀) return new FileFilter("Images (*.jpg,*.jpeg,*.gif,*.png)","*.jpg;*.jpeg;*.gif;*.png"); } private function getTextTypeFilter():FileFilter {//FileFilter类。(1.说明文字,2允许后缀) return new FileFilter("Text Files (*.txt,*.rtf)","*.txt;*.rtf"); } private function doOnComplete():void { //当上传全部发完时发送的事件“FileReferenceListExample.LIST_COMPLETE”(type=listComplete) var event:Event = new Event(FileReferenceListExample.LIST_COMPLETE); dispatchEvent(event); } private function addPendingFile(file:FileReference):void {//将一个文件引用推入待发文件数组 trace("addPendingFile: name=" + file.name); pendingFiles.push(file); file.addEventListener(Event.OPEN,openHandler);//侦听打开本地文件读取事件 file.addEventListener(Event.COMPLETE,completeHandler);//侦听本地文件发送到服务器完成 file.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);//侦听io错误 file.addEventListener(ProgressEvent.PROGRESS,progressHandler);//侦听发送过程 file.addEventListener(SecurityErrorEvent.SECURITY_ERROR,securityErrorHandler);//侦听安全错误 //file.addEventListener(DataEvent.) file.upload(uploadURL);//重要语句。上传至指定网址。upload属FileReference的公共方法 } private function removePendingFile(file:FileReference):void {//删除缓存文件。释放内存 for (var i:uint; i < pendingFiles.length; i++) { if (pendingFiles[i].name == file.name) {//根据上传完毕的文件名删除该项 pendingFiles.splice(i,1); //pendingFiles数组删除一项 if (pendingFiles.length == 0) { doOnComplete(); } return; } } } private function selectHandler(event:Event):void {//上传框确认按钮按下 trace("selectHandler: " + fileList.length + " files"); //fileList为FileReferenceList类的一个公共属性。由于此类继承自它,所以可以直接使用 pendingFiles = new Array(); var file:FileReference; for (var i:uint = 0; i < fileList.length; i++) { file = FileReference(fileList[i]); //根据FRL的公共filelist数组,生成FR对象,推入pendingFile数组 addPendingFile(file); } } private function cancelHandler(event:Event):void {//取消按钮 // var file:FileReference = FileReference(event.target); trace("cancelHandler:canceled"); } private function openHandler(event:Event):void { //当打开文件时,输出文件名 var file:FileReference = FileReference(event.target); trace("openHandler: name=" + file.name); } private function progressHandler(event:ProgressEvent):void {//传输时输出 var file:FileReference = FileReference(event.target); trace("progressHandler: name=" + file.name + " bytesLoaded=" + event.bytesLoaded + " bytesTotal=" + event.bytesTotal); } private function completeHandler(event:Event):void {//单个文件时完成时 var file:FileReference = FileReference(event.target); trace("completeHandler: name=" + file.name); removePendingFile(file); } private function httpErrorHandler(event:Event):void { var file:FileReference = FileReference(event.target); trace("httpErrorHandler: name=" + file.name); } private function ioErrorHandler(event:Event):void {//io错误时 var file:FileReference = FileReference(event.target); trace("ioErrorHandler: name=" + file.name); } private function securityErrorHandler(event:Event):void {//安全沙箱错误时 var file:FileReference = FileReference(event.target); trace("securityErrorHandler: name=" + file.name + " event=" + event.toString()); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容