flex文件下载

flex与java后端结合,实现文件下载的原理:

1、flex调用相应的java函数得到服务器上的文件地址。

2、利用flex里的封装类FileReference。 使用download(URLRequest, defaultFilename) 将服务器上的文件下载的客户端本地。

    注意注意 :这里的URLRequest.url="...." 不能有中文。否则会出现2038错误I/O文件错误。

3.可以给fileReference的对象添加事件,。监视文件是否下载完成。

 

 

具体源码:

<?xml version="1.0" encoding="utf-8"?>
<utils:BaseModule xmlns:fx="http://ns.adobe.com/mxml/2009"
				  xmlns:s="library://ns.adobe.com/flex/spark"
				  xmlns:mx="library://ns.adobe.com/flex/mx"
				  xmlns:utils="utils.*"
				  xmlns:commons="commons.*"
				  width="100%" height="100%"
				  creationComplete="basemodule1_creationCompleteHandler(event)"
				  layout="absolute">
	<fx:Script>
		<![CDATA[
			
			import mx.controls.Alert;
			import mx.rpc.events.ResultEvent;
			import mx.collections.ArrayCollection;
			
			import events.SysEvents;
			
			import mx.controls.Alert;
			import mx.events.FlexEvent;
			import mx.rpc.events.ResultEvent;
 
			[Bindable]  
			private var comboDatas:ArrayCollection = new ArrayCollection([{label:"根据查询结果"},{label:""},{label:"选项3"},{label:"选项4"}]);  
			[Bindable]
			public var dat:ArrayCollection=new ArrayCollection();
			private var  resultDownUrl:String="";
			private var filerefer:FileReference=new FileReference();
			
			
			protected function basemodule1_creationCompleteHandler(event:FlexEvent):void
			{
				// TODO Auto-generated method stub
				//获得文件到出路径
				contcatExport.addEventListener(ResultEvent.RESULT,getExportUrl);
				contcatExport.exportContactDirectory("","","");
				//下载完成后删除服务器文件
				filerefer.addEventListener(Event.COMPLETE, onDownloadComplete);
			}
			
			private function getExportUrl(evs:ResultEvent):void{
				resultDownUrl=evs.result.toString();
			}
			
			protected function onDownloadComplete(e:Event):void {  
				var file:FileReference = e.target as FileReference;  
				Alert.show("文件下载成功! 其中文件名: " + file.name + "  文件大小:" + file.size);  
				/* statisDownload.exportDel(resultDownUrl);  */
			} 
			
			private function init():void{

			}
			
			
			protected function group1_clickHandler(event:MouseEvent):void
			{ 
 				  var downloadURL:URLRequest=new URLRequest();				
				  downloadURL.url =resultDownUrl;  //"report/201310161910736.zip";
				  filerefer.download(downloadURL);	   	
			}
			
			protected function getDownloadURL(evs:ResultEvent):void{
				var result:Object=JSON.parse(evs.result.toString());
			}
					
			protected function labelImport_clickHandler(event:MouseEvent):void
			{

			}
			
			protected function labelCancel_clickHandler(event:MouseEvent):void
			{
				// TODO Auto-generated method stub
				close_Cli();
			}
			
			public function close_Cli():void{
				SysEvents.dispatch(SysEvents.REMOVE_ALL_MODULE,"");
			}
			
		]]>
	</fx:Script>
	<fx:Declarations>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
		<s:RemoteObject id="contcatExport" destination="contcatExport"/>
	</fx:Declarations>
	<s:Group width="100%" height="100%">
		<s:Rect width="100%" height="100%">
			<s:fill>
				<s:SolidColor alpha="0.5" color="#000000"/>
			</s:fill>
		</s:Rect>
	</s:Group>
	
	
	<fx:Declarations>
		<mx:HTTPService id="sevlet" resultFormat="e4x"/>
	</fx:Declarations>
	
	 <s:HGroup width="100%" height="100%" horizontalAlign="center" verticalAlign="middle">
		 <commons:myPop clo="{close_Cli}" iconPath="assets/requirM/7_.png" labelStr="目录导出"
					   skinClass="Skins.myPopSkin">
			<s:VGroup left="5" right="5" top="10" bottom="5" width="500" height="400" gap="10">
				<s:HGroup width="100%" paddingLeft="20" verticalAlign="middle">
					<mx:ComboBox id="items" x="10" y="34" width="228" dataProvider="{comboDatas}" selectedIndex="0"/> 
				</s:HGroup>
				
				<s:HGroup width="100%" paddingLeft="20" verticalAlign="middle">
					<s:Label width="40%" text="文件组织方式:  "/> 
					<s:Label width="40%" text="大文件" color="red"/> 
				</s:HGroup>
		
				<s:HGroup width="100%" gap="40" horizontalAlign="center" verticalAlign="middle">
					<s:Group width="109" height="35" buttonMode="true"
							 click="group1_clickHandler(event)">
						<s:Image source="assets/pop/25.png"/>
						<s:HGroup width="109" height="35" horizontalAlign="center"
								  verticalAlign="middle">
							<s:Label text="确定"/>
						</s:HGroup>
					</s:Group>
					<s:Group width="109" height="35" buttonMode="true">
						<s:Image source="assets/pop/25_.png"/>
						<s:HGroup width="109" height="35" horizontalAlign="center"
								  verticalAlign="middle">
							<s:Label text="取消" click="close_Cli()"/>
						</s:HGroup>
					</s:Group>
				</s:HGroup>
			</s:VGroup>
		</commons:myPop>
	</s:HGroup>

</utils:BaseModule><?xml version="1.0" encoding="utf-8"?>
<utils:BaseModule xmlns:fx="http://ns.adobe.com/mxml/2009"
				  xmlns:s="library://ns.adobe.com/flex/spark"
				  xmlns:mx="library://ns.adobe.com/flex/mx"
				  xmlns:utils="utils.*"
				  xmlns:commons="commons.*"
				  width="100%" height="100%"
				  creationComplete="basemodule1_creationCompleteHandler(event)"
				  layout="absolute">
	<fx:Script>
		<![CDATA[
			
			import mx.controls.Alert;
			import mx.rpc.events.ResultEvent;
			import mx.collections.ArrayCollection;
			
			import events.SysEvents;
			
			import mx.controls.Alert;
			import mx.events.FlexEvent;
			import mx.rpc.events.ResultEvent;
 
			[Bindable]  
			private var comboDatas:ArrayCollection = new ArrayCollection([{label:"根据查询结果"},{label:""}]);  
			[Bindable]
			public var dat:ArrayCollection=new ArrayCollection();
			private var  resultDownUrl:String="";
			private var filerefer:FileReference=new FileReference();
			
			
			protected function basemodule1_creationCompleteHandler(event:FlexEvent):void
			{
				// TODO Auto-generated method stub
				//获得文件到出路径
				contcatExport.addEventListener(ResultEvent.RESULT,getExportUrl);
				contcatExport.exportContactDirectory("","","");
				//下载完成后删除服务器文件
				filerefer.addEventListener(Event.COMPLETE, onDownloadComplete);
			}
			
			private function getExportUrl(evs:ResultEvent):void{
				resultDownUrl=evs.result.toString();
			}
			
			protected function onDownloadComplete(e:Event):void {  
				var file:FileReference = e.target as FileReference;  
				Alert.show("文件下载成功! 其中文件名: " + file.name + "  文件大小:" + file.size);  
				/* statisDownload.exportDel(resultDownUrl);  */
			} 
			
			private function init():void{

			}
			
			
			protected function group1_clickHandler(event:MouseEvent):void
			{ 
 				  var downloadURL:URLRequest=new URLRequest();				
				  downloadURL.url =resultDownUrl;  //"report/201310161910736.zip";
				  filerefer.download(downloadURL);	   	
			}
			
			protected function getDownloadURL(evs:ResultEvent):void{
				var result:Object=JSON.parse(evs.result.toString());
			}
					
			protected function labelImport_clickHandler(event:MouseEvent):void
			{

			}
			
			protected function labelCancel_clickHandler(event:MouseEvent):void
			{
				// TODO Auto-generated method stub
				close_Cli();
			}
			
			public function close_Cli():void{
				SysEvents.dispatch(SysEvents.REMOVE_ALL_MODULE,"");
			}
			
		]]>
	</fx:Script>
	<fx:Declarations>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
		<s:RemoteObject id="contcatExport" destination="contcatExport"/>
	</fx:Declarations>
	<s:Group width="100%" height="100%">
		<s:Rect width="100%" height="100%">
			<s:fill>
				<s:SolidColor alpha="0.5" color="#000000"/>
			</s:fill>
		</s:Rect>
	</s:Group>
	
	
	<fx:Declarations>
		<mx:HTTPService id="sevlet" resultFormat="e4x"/>
	</fx:Declarations>
	
	 <s:HGroup width="100%" height="100%" horizontalAlign="center" verticalAlign="middle">
		 <commons:myPop clo="{close_Cli}" iconPath="assets/requirM/7_.png" labelStr="目录导出"
					   skinClass="Skins.myPopSkin">
			<s:VGroup left="5" right="5" top="10" bottom="5" width="500" height="400" gap="10">
				<s:HGroup width="100%" paddingLeft="20" verticalAlign="middle">
					<mx:ComboBox id="items" x="10" y="34" width="228" dataProvider="{comboDatas}" selectedIndex="0"/> 
				</s:HGroup>
				
				<s:HGroup width="100%" paddingLeft="20" verticalAlign="middle">
					<s:Label width="40%" text="文件组织方式:  "/> 
					<s:Label width="40%" text="大文件" color="red"/> 
				</s:HGroup>
		
				<s:HGroup width="100%" gap="40" horizontalAlign="center" verticalAlign="middle">
					<s:Group width="109" height="35" buttonMode="true"
							 click="group1_clickHandler(event)">
						<s:Image source="assets/pop/25.png"/>
						<s:HGroup width="109" height="35" horizontalAlign="center"
								  verticalAlign="middle">
							<s:Label text="确定"/>
						</s:HGroup>
					</s:Group>
					<s:Group width="109" height="35" buttonMode="true">
						<s:Image source="assets/pop/25_.png"/>
						<s:HGroup width="109" height="35" horizontalAlign="center"
								  verticalAlign="middle">
							<s:Label text="取消" click="close_Cli()"/>
						</s:HGroup>
					</s:Group>
				</s:HGroup>
			</s:VGroup>
		</commons:myPop>
	</s:HGroup>

</utils:BaseModule>

  

posted @ 2013-10-16 23:14  夲蓙  阅读(742)  评论(0编辑  收藏  举报