?下例说明如何使用事件来管理多个文件的上载。CustomFileReferenceList 类扩展了 FileReferenceList,它包含一个
complete
事件,在上载 FileReferenceList 对象中的各个文件时将分派该事件。FileReferenceList 对象中的所有文件上载完毕后,将分派 FileReferenceListExample 类中的
LIST_COMPLETE
事件。
要运行该示例,请插入一个编写好以接受 http://www.[yourDomain].com/yourUploadHandlerScript.cfm 处的文件上载的脚本。根据 SWF 文件的位置及文件的上载位置,您可能还需要编译 SWF 文件,将“本地回放安全性”设置为“只访问网络”,或更新 Flash ? Player 的安全设置,以允许此文件网络访问。如果上载服务器为远程服务器,并且要从桌面计算机运行此示例,则服务器必须具有 crossdomain.xml 文件。
view plain
copy to clipboard
print
?
- 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()?{??
- ????????????initiateFileUpload();??
- ????????}??
- ??
- ????????private?function?initiateFileUpload():void?{??
-
????????????var?fileRef:CustomFileReferenceList?=?new?CustomFileReferenceList();??
- ????????????fileRef.addEventListener(FileReferenceListExample.LIST_COMPLETE,?listCompleteHandler);??
- ????????????fileRef.browse(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?{??
- ????private?var?uploadURL:URLRequest;??
- ????private?var?pendingFiles:Array;??
- ??
- ????public?function?CustomFileReferenceList()?{??
-
????????uploadURL?=?new?URLRequest();??
-
????????uploadURL.url?=?"http://www.[yourDomain].com/yourUploadHandlerScript.cfm";??
- ????????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?{??
- ????????return?new?FileFilter("Images?(*.jpg,?*.jpeg,?*.gif,?*.png)",?"*.jpg;*.jpeg;*.gif;*.png");??
- ????}??
- ???
- ????private?function?getTextTypeFilter():FileFilter?{??
- ????????return?new?FileFilter("Text?Files?(*.txt,?*.rtf)",?"*.txt;*.rtf");??
- ????}??
- ???
- ????private?function?doOnComplete():void?{??
-
????????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);??
- ????????file.addEventListener(ProgressEvent.PROGRESS,?progressHandler);??
- ????????file.addEventListener(SecurityErrorEvent.SECURITY_ERROR,?securityErrorHandler);??
- ????????file.upload(uploadURL);??
- ????}??
- ???
- ????private?function?removePendingFile(file:FileReference):void?{??
-
????????for?(var?i:uint;?i?<?pendingFiles.length;?i++)?{??
-
????????????if?(pendingFiles[i].name?==?file.name)?{??
- ????????????????pendingFiles.splice(i,?1);??
-
????????????????if?(pendingFiles.length?==?0)?{??
- ????????????????????doOnComplete();??
- ????????????????}??
- ????????????????return;??
- ????????????}??
- ????????}??
- ????}??
- ???
- ????private?function?selectHandler(event:Event):void?{??
- ????????trace("selectHandler:?"?+?fileList.length?+?"?files");??
-
????????pendingFiles?=?new?Array();??
- ????????var?file:FileReference;??
-
????????for?(var?i:uint?=?0;?i?<?fileList.length;?i++)?{??
-
????????????file?=?FileReference(fileList[i]);??
- ????????????addPendingFile(file);??
- ????????}??
- ????}??
- ???
- ????private?function?cancelHandler(event:Event):void?{??
-
????????var?file:FileReference?=?FileReference(event.target);??
-
????????trace("cancelHandler:?name="?+?file.name);??
- ????}??
- ???
- ????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?{??
-
????????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());??
- ????}??
- }??