下例说明如何使用事件来管理多个文件的上载。CustomFileReferenceList 类扩展了 FileReferenceList,它包含一个
complete
事件,在上载 FileReferenceList 对象中的各个文件时将分派该事件。FileReferenceList 对象中的所有文件上载完毕后,将分派 FileReferenceListExample 类中的
LIST_COMPLETE
事件。
要运行该示例,请插入一个编写好以接受 http://www.[yourDomain].com/yourUploadHandlerScript.cfm 处的文件上载的脚本。根据 SWF 文件的位置及文件的上载位置,您可能还需要编译 SWF 文件,将“本地回放安全性”设置为“只访问网络”,或更新 Flash ® Player 的安全设置,以允许此文件网络访问。如果上载服务器为远程服务器,并且要从桌面计算机运行此示例,则服务器必须具有 crossdomain.xml 文件。
- 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());
- }
- }