Flex实现多文件批量上传

来源:互联网 发布:如何将mac照片导入硬盘 编辑:程序博客网 时间:2024/05/22 14:00
下例说明如何使用事件来管理多个文件的上载。CustomFileReferenceList 类扩展了 FileReferenceList,它包含一个 complete 事件,在上载 FileReferenceList 对象中的各个文件时将分派该事件。FileReferenceList 对象中的所有文件上载完毕后,将分派 FileReferenceListExample 类中的LIST_COMPLETE 事件。

要运行该示例,请插入一个编写好以接受 http://www.[yourDomain].com/yourUploadHandlerScript.cfm 处的文件上载的脚本。根据 SWF 文件的位置及文件的上载位置,您可能还需要编译 SWF 文件,将“本地回放安全性”设置为“只访问网络”,或更新 Flash® Player 的安全设置,以允许此文件网络访问。如果上载服务器为远程服务器,并且要从桌面计算机运行此示例,则服务器必须具有 crossdomain.xml 文件。

[html] view plaincopy
  1. package {  
  2.     import flash.display.Sprite;  
  3.     import flash.events.*;  
  4.     import flash.net.FileReference;  
  5.     import flash.net.FileReferenceList;  
  6.    
  7.     public class FileReferenceListExample extends Sprite {  
  8.         public static var LIST_COMPLETE:String = "listComplete";  
  9.         public function FileReferenceListExample() {  
  10.             initiateFileUpload();  
  11.         }  
  12.   
  13.         private function initiateFileUpload():void {  
  14.             var fileRef:CustomFileReferenceList = new CustomFileReferenceList();  
  15.             fileRef.addEventListener(FileReferenceListExample.LIST_COMPLETE, listCompleteHandler);  
  16.             fileRef.browse(fileRef.getTypes());  
  17.         }  
  18.   
  19.         private function listCompleteHandler(event:Event):void {  
  20.             trace("listCompleteHandler");  
  21.         }  
  22.     }  
  23. }  
  24.    
  25. import flash.events.*;  
  26. import flash.net.FileReference;  
  27. import flash.net.FileReferenceList;  
  28. import flash.net.FileFilter;  
  29. import flash.net.URLRequest;  
  30.    
  31. class CustomFileReferenceList extends FileReferenceList {  
  32.     private var uploadURL:URLRequest;  
  33.     private var pendingFiles:Array;  
  34.   
  35.     public function CustomFileReferenceList() {  
  36.         uploadURL = new URLRequest();  
  37.         uploadURL.url = "http://www.[yourDomain].com/yourUploadHandlerScript.cfm";  
  38.         initializeListListeners();  
  39.     }  
  40.   
  41.     private function initializeListListeners():void {  
  42.         addEventListener(Event.SELECT, selectHandler);  
  43.         addEventListener(Event.CANCEL, cancelHandler);  
  44.     }  
  45.   
  46.     public function getTypes():Array {  
  47.         var allTypes:Array = new Array();  
  48.         allTypes.push(getImageTypeFilter());  
  49.         allTypes.push(getTextTypeFilter());  
  50.         return allTypes;  
  51.     }  
  52.    
  53.     private function getImageTypeFilter():FileFilter {  
  54.         return new FileFilter("Images (*.jpg, *.jpeg, *.gif, *.png)", "*.jpg;*.jpeg;*.gif;*.png");  
  55.     }  
  56.    
  57.     private function getTextTypeFilter():FileFilter {  
  58.         return new FileFilter("Text Files (*.txt, *.rtf)", "*.txt;*.rtf");  
  59.     }  
  60.    
  61.     private function doOnComplete():void {  
  62.         var event:Event = new Event(FileReferenceListExample.LIST_COMPLETE);  
  63.         dispatchEvent(event);  
  64.     }  
  65.    
  66.     private function addPendingFile(file:FileReference):void {  
  67.         trace("addPendingFile: name=" + file.name);  
  68.         pendingFiles.push(file);  
  69.         file.addEventListener(Event.OPEN, openHandler);  
  70.         file.addEventListener(Event.COMPLETE, completeHandler);  
  71.         file.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);  
  72.         file.addEventListener(ProgressEvent.PROGRESS, progressHandler);  
  73.         file.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);  
  74.         file.upload(uploadURL);  
  75.     }  
  76.    
  77.     private function removePendingFile(file:FileReference):void {  
  78.         for (var i:uint; i < pendingFiles.length; i++) {  
  79.             if (pendingFiles[i].name == file.name) {  
  80.                 pendingFiles.splice(i, 1);  
  81.                 if (pendingFiles.length == 0) {  
  82.                     doOnComplete();  
  83.                 }  
  84.                 return;  
  85.             }  
  86.         }  
  87.     }  
  88.    
  89.     private function selectHandler(event:Event):void {  
  90.         trace("selectHandler: " + fileList.length + " files");  
  91.         pendingFiles = new Array();  
  92.         var file:FileReference;  
  93.         for (var i:uint = 0; i < fileList.length; i++) {  
  94.             file = FileReference(fileList[i]);  
  95.             addPendingFile(file);  
  96.         }  
  97.     }  
  98.    
  99.     private function cancelHandler(event:Event):void {  
  100.         var file:FileReference = FileReference(event.target);  
  101.         trace("cancelHandler: name=" + file.name);  
  102.     }  
  103.    
  104.     private function openHandler(event:Event):void {  
  105.         var file:FileReference = FileReference(event.target);  
  106.         trace("openHandler: name=" + file.name);  
  107.     }  
  108.    
  109.     private function progressHandler(event:ProgressEvent):void {  
  110.         var file:FileReference = FileReference(event.target);  
  111.         trace("progressHandler: name=" + file.name + " bytesLoaded=" + event.bytesLoaded + " bytesTotal=" + event.bytesTotal);  
  112.     }  
  113.    
  114.     private function completeHandler(event:Event):void {  
  115.         var file:FileReference = FileReference(event.target);  
  116.         trace("completeHandler: name=" + file.name);  
  117.         removePendingFile(file);  
  118.     }  
  119.    
  120.     private function httpErrorHandler(event:Event):void {  
  121.         var file:FileReference = FileReference(event.target);  
  122.         trace("httpErrorHandler: name=" + file.name);  
  123.     }  
  124.    
  125.     private function ioErrorHandler(event:Event):void {  
  126.         var file:FileReference = FileReference(event.target);  
  127.         trace("ioErrorHandler: name=" + file.name);  
  128.     }  
  129.    
  130.     private function securityErrorHandler(event:Event):void {  
  131.         var file:FileReference = FileReference(event.target);  
  132.         trace("securityErrorHandler: name=" + file.name + " event=" + event.toString());  
  133.     }  

原创粉丝点击