Flex实现多文件批量上传

来源:互联网 发布:linux安装中文语言包 编辑:程序博客网 时间:2024/05/22 15:39
 下例说明如何使用事件来管理多个文件的上载。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());    }}


 

原创粉丝点击