Flex 带进度条的文件上传

来源:互联网 发布:淘宝投诉卖家盗用图片 编辑:程序博客网 时间:2024/05/16 07:36

1.DataLoader.as

package

{
import flash.events.ErrorEvent;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.IEventDispatcher;
import flash.events.IOErrorEvent;
import flash.events.SecurityErrorEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;

import mx.collections.ArrayCollection;

[Event(name="yes",type="ContentEvent")]
[Event(name="no",type="ContentEvent")]
public class DataLoader extends EventDispatcher
{
private var _loader:URLLoader;

public function DataLoader(target:IEventDispatcher=null)
{
super(target);
_loader.addEventListener(Event.COMPLETE,onComplete);
_loader.addEventListener(IOErrorEvent.IO_ERROR,onError);
_loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,onError);
}

private function onComplete(event:Event):void{
var users:ArrayCollection=new ArrayCollection();

for each(var xml:XML in (_loader.data).user){
users.addItem(xml.@name+"-"+xml.@site);
}

var evt:ContentEvent=new ContentEvent(ContentEvent.YES);
evt.users=users;

this.dispatchEvent(evt);

}

public function load(url:String):void{
_loader.load(new URLRequest(url));
}

private function onError(event:ErrorEvent):void{
var evt:ContentEvent=new ContentEvent(ContentEvent.NO);
evt.error=event.text;
this.dispatchEvent(evt);
}


public function get loader():URLLoader
{
return _loader;
}


public function set loader(value:URLLoader):void
{
_loader = value;
}


}

}


2.ProgressBar.mxml

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
  xmlns:s="library://ns.adobe.com/flex/spark" 
  xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">

<fx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.events.BrowserChangeEvent;
import mx.events.FlexEvent;

public var file:FileReference=new FileReference();

protected function upload_clickHandler(event:MouseEvent):void
{
if(file.size>0){
file.load();
}
}

protected function panel1_creationCompleteHandler(event:FlexEvent):void
{
file.addEventListener(Event.SELECT,fileselect);
file.addEventListener(Event.COMPLETE,filecomplete);
file.addEventListener(ProgressEvent.PROGRESS,fileprogress);
}

private function filecomplete(e:Event):void{
var bytearray:ByteArray=new ByteArray();
bytearray=file.data;
bytearray.position=0;
Alert.show("上传成功!");
}

private function fileprogress(e:ProgressEvent):void{
pb.label="已上传"+Math.round(100*e.bytesLoaded/e.bytesTotal)+"%";
pb.setProgress(Math.round(100*e.bytesLoaded/e.bytesTotal),100);

}

[Bindable]
private var msg:String="请选择文件";
private function fileselect(evt:Event):void{
msg=file.name;
}
]]>
</fx:Script>

<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<s:Panel x="252" y="87" width="250" height="200" title="文件上传" creationComplete="panel1_creationCompleteHandler(event)">
<s:TextInput x="20" y="17" text="{msg}"/>
<s:Button x="168" y="18" label="浏览" click="file.browse();"/>
<mx:ProgressBar id="pb" x="10" y="91" width="138" labelPlacement="center"/>
<s:Button x="168" y="91" label="上传" click="upload_clickHandler(event)"/>
</s:Panel>
</s:Application>