您的位置:首页 > 其它

Flex实现多文件批量上传

2011-08-04 17:20 363 查看
下例说明如何使用事件来管理多个文件的上载。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());
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: