flex上传多个文件

我这里的需求是上传前可以删除不需要的,开始上传后不可以更改。

运行后的样子:

uploadgrid.mxm 上传jar的类,

Html代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
  3. xmlns:s="library://ns.adobe.com/flex/spark"
  4. creationComplete="group_creationCompleteHandler(event)"
  5. xmlns:mx="library://ns.adobe.com/flex/mx"
  6. width="500" height="250">
  7. <s:layout>
  8. <s:BasicLayout/>
  9. </s:layout>
  10. <fx:Declarations>
  11. <mx:NumberFormatter id="filesizeFormatter" useThousandsSeparator="true"/>
  12. </fx:Declarations>
  13. <fx:Script>
  14. <![CDATA[
  15. import mx.collections.ArrayCollection;
  16. import mx.controls.Alert;
  17. import mx.events.CloseEvent;
  18. import mx.events.CollectionEvent;
  19. import mx.events.FlexEvent;
  20. import mx.formatters.CurrencyFormatter;
  21. import mx.formatters.NumberFormatter;
  22. [Bindable]
  23. public var deleteenabled:Boolean=true;
  24. //文件列表
  25. [Bindable]
  26. private var fileRefs: FileReferenceList = new FileReferenceList();
  27. //这个地址是我测试用的服务器地址
  28. [Bindable]
  29. private var urlrequest: URLRequest = new URLRequest("http://localhost:8080/auto/FileUploaded");
  30. //文件列表中的文件
  31. [Bindable]
  32. public var selectedFiles: ArrayCollection = new ArrayCollection([]);
  33. //上传的文件
  34. private var singleThreadFiles: Array = [];
  35. //逐个上传文件
  36. private function singleThreadUploadFile(): void
  37. {
  38. //FIFO:逐个从列表中取出,进行上传
  39. if (singleThreadFiles.length > 0)
  40. {
  41. var mf: MyFile = singleThreadFiles.pop() as MyFile ;
  42. var f:FileReference=mf.fr;
  43. f.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, doSingleUploadFileComplete);
  44. f.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
  45. f.upload(urlrequest);
  46. }
  47. else
  48. {
  49. uploadbutton.enabled=false;
  50. uploadtext.text="全部上传成功!";
  51. showuploadjar();
  52. }
  53. }
  54. private function doSingleUploadFileComplete(event: Event): void
  55. {
  56. var uploadInfo:String=event.data;
  57. var uploadInfoArray:Array = uploadInfo.split("#");
  58. if(uploadInfoArray[0]=="true")
  59. {
  60. var f: FileReference = event.target as FileReference;
  61. f.removeEventListener(Event.COMPLETE, doSingleUploadFileComplete);
  62. singleThreadUploadFile();
  63. }else
  64. {
  65. Alert.show(uploadInfoArray[1]+"请检查网络或程序是否正常,目录是否正确并创建,请删除上传不成功的jar,重新选择后上传!");
  66. selectFileButton.enabled=true;
  67. cleanAll.enabled=true;
  68. deleteenabled=true;
  69. }
  70. }
  71. //初始化
  72. private function init(): void
  73. {
  74. Security.allowDomain("*");
  75. fileRefs.addEventListener(Event.SELECT, fileSelectHandler);
  76. fileRefs.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
  77. addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
  78. }
  79. //要上传的文件类型,我这里是jar文件
  80. private function selectFile(): void
  81. {
  82. var jarfile:FileFilter = new FileFilter("jar文件(*.jar)", "*.jar*");
  83. var allfile:FileFilter = new FileFilter("所有文件(*.*)", "*.*");
  84. var allTypes:Array = new Array();
  85. allTypes.push(jarfile);
  86. allTypes.push(allfile);
  87. fileRefs.browse(allTypes);
  88. }
  89. //用户选择的文件,如果需要判断是否可以多次选择同名的文件可以在这里判断
  90. private function fileSelectHandler(event: Event): void
  91. {
  92. for each (var f: FileReference in fileRefs.fileList)
  93. {
  94. var mf:MyFile = new MyFile(f);
  95. selectedFiles.addItem(mf);
  96. }
  97. }
  98. //出错后的处理
  99. private function ioErrorHandler(e:IOErrorEvent): void
  100. {
  101. Alert.show(e.text);
  102. Alert.show("请检查网络或程序是否正常,请删除上传不成功的jar,重新选择后上传!");
  103. selectFileButton.enabled=true;
  104. cleanAll.enabled=true;
  105. deleteenabled=true;
  106. }
  107. //删除列表中的文件
  108. public function removeFile(mf: MyFile): void
  109. {
  110. var index: int = selectedFiles.getItemIndex(mf);
  111. if (index != -1)
  112. selectedFiles.removeItemAt(index);
  113. }
  114. //初始化组件或应用程序
  115. protected function group_creationCompleteHandler(event:FlexEvent):void
  116. {
  117. init();
  118. }
  119. //确认上传的文件
  120. protected function button1_clickHandler(event:MouseEvent):void
  121. {
  122. Alert.show("开始上传后不能更改选择的jar包 ,确定上传?",
  123. "确认上传",
  124. Alert.YES|Alert.NO,
  125. null,
  126. startUpload);
  127. }
  128. //根据业务的需求上传后不能更改,可以根据自己的业务逻辑去改相应的处理
  129. private function startUpload(e: CloseEvent): void{
  130. if (e.detail == Alert.YES){
  131. selectFileButton.enabled=false;
  132. cleanAll.enabled=false;
  133. deleteenabled=false;
  134. singleThreadFiles = selectedFiles.toArray().concat();
  135. for(var i:int=0;i<singleThreadFiles.length;i++)
  136. {
  137. if(singleThreadFiles[i] is MyFile)
  138. {
  139. var mf:MyFile= singleThreadFiles[i] as MyFile;
  140. var f:FileReference=mf.fr;
  141. trace(f.name);
  142. }
  143. }
  144. singleThreadFiles.reverse();
  145. singleThreadUploadFile();
  146. }
  147. }
  148. //输出上传后的jar的信息,如果需要更多的信息可以在MyFlie类里找到
  149. private function showuploadjar():void
  150. {
  151. for(var i:int=0; i<selectedFiles.length;i++)
  152. {
  153. var mf:MyFile=selectedFiles.getItemAt(i) as MyFile;
  154. // Alert.show(mf.uploadFilePath+mf.uploadFileName);
  155. trace("上传后的路径:"+mf.uploadFilePath+mf.uploadFileName);
  156. mf.removeDateEvent();
  157. }
  158. }
  159. ]]>
  160. </fx:Script>
  161. <s:VGroup paddingTop="10">
  162. <mx:VBox>
  163. <mx:HBox width="100%">
  164. <mx:Button id="selectFileButton" label="浏览" click="selectFile()"/>
  165. <mx:Box width="100%" horizontalAlign="right">
  166. <mx:Button id="cleanAll" click="selectedFiles.removeAll();" label="清空"/>
  167. </mx:Box>
  168. </mx:HBox>
  169. <mx:DataGrid id="files" dataProvider="{selectedFiles}" >
  170. <mx:columns>
  171. <mx:DataGridColumn width="200" headerText="文件名" dataField="fr.name" />
  172. <mx:DataGridColumn width="100" headerText="大小(字节)" dataField="fr.size">
  173. <mx:itemRenderer>
  174. <fx:Component>
  175. <mx:Label text="{outerDocument.filesizeFormatter.format(data.size)}" textAlign="right"/>
  176. </fx:Component>
  177. </mx:itemRenderer>
  178. </mx:DataGridColumn>
  179. <mx:DataGridColumn width="100" headerText="状态" dataField="uploadlable" />
  180. <mx:DataGridColumn headerText="删除" width="80">
  181. <mx:itemRenderer>
  182. <fx:Component>
  183. <mx:HBox fontSize="10" fontWeight="normal" fontThickness="1">
  184. <fx:Script>
  185. <![CDATA[
  186. protected function linkbutton1_clickHandler(event:MouseEvent):void
  187. {
  188. var mf:MyFile = data as MyFile;
  189. outerDocument.removeFile(mf);
  190. }
  191. ]]>
  192. </fx:Script>
  193. <mx:LinkButton label="Delete" click="linkbutton1_clickHandler(event)" enabled="{outerDocument.deleteenabled}">
  194. </mx:LinkButton>
  195. </mx:HBox>
  196. </fx:Component>
  197. </mx:itemRenderer>
  198. </mx:DataGridColumn>
  199. </mx:columns>
  200. </mx:DataGrid>
  201. <mx:HBox>
  202. <mx:Button label="上传" id="uploadbutton" click="button1_clickHandler(event)" />
  203. <s:Label paddingTop="7" id="uploadtext" text="" />
  204. </mx:HBox>
  205. </mx:VBox>
  206. </s:VGroup>
  207. </s:Application>
<?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"
		 creationComplete="group_creationCompleteHandler(event)"
		 xmlns:mx="library://ns.adobe.com/flex/mx"
		 width="500" height="250">
	<s:layout>
		<s:BasicLayout/>
	</s:layout>
	<fx:Declarations>
		<mx:NumberFormatter id="filesizeFormatter" useThousandsSeparator="true"/>
	</fx:Declarations>
	<fx:Script>
		<![CDATA[
			import mx.collections.ArrayCollection;
			import mx.controls.Alert;
			import mx.events.CloseEvent;
			import mx.events.CollectionEvent;
			import mx.events.FlexEvent;
			import mx.formatters.CurrencyFormatter;
			import mx.formatters.NumberFormatter;
			
			
			[Bindable]
			public var deleteenabled:Boolean=true;
			
			//文件列表
			[Bindable]
			private var fileRefs: FileReferenceList = new FileReferenceList();
			
			//这个地址是我测试用的服务器地址
			[Bindable]
			private var urlrequest: URLRequest = new URLRequest("http://localhost:8080/auto/FileUploaded");
			
			//文件列表中的文件
			[Bindable]
			public var selectedFiles: ArrayCollection = new ArrayCollection([]);
			
			//上传的文件
			private var singleThreadFiles: Array = [];
			
			//逐个上传文件
			private function singleThreadUploadFile(): void
			{
				//FIFO:逐个从列表中取出,进行上传
				if (singleThreadFiles.length > 0)
				{
					var mf: MyFile = singleThreadFiles.pop() as MyFile ;
					var f:FileReference=mf.fr;
					f.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, doSingleUploadFileComplete);
					f.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
					f.upload(urlrequest);
				}
				else
				{
					uploadbutton.enabled=false;
					uploadtext.text="全部上传成功!";
					showuploadjar();
					
				}
			}
			
			private function doSingleUploadFileComplete(event: Event): void
			{
				var uploadInfo:String=event.data;
				var uploadInfoArray:Array = uploadInfo.split("#");	
				if(uploadInfoArray[0]=="true")
				{
					var f: FileReference = event.target as FileReference;
					f.removeEventListener(Event.COMPLETE, doSingleUploadFileComplete);
					singleThreadUploadFile();
				}else
				{
					Alert.show(uploadInfoArray[1]+"请检查网络或程序是否正常,目录是否正确并创建,请删除上传不成功的jar,重新选择后上传!");
					selectFileButton.enabled=true;
					cleanAll.enabled=true;
					deleteenabled=true;
				}
			}
			
			//初始化
			private function init(): void
			{
				Security.allowDomain("*");
				fileRefs.addEventListener(Event.SELECT, fileSelectHandler);
				fileRefs.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
				addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);   
			}
			
			//要上传的文件类型,我这里是jar文件
			private function selectFile(): void
			{
				
				var jarfile:FileFilter = new FileFilter("jar文件(*.jar)", "*.jar*"); 
				var allfile:FileFilter = new FileFilter("所有文件(*.*)", "*.*"); 
				var allTypes:Array = new Array(); 
				allTypes.push(jarfile);
				allTypes.push(allfile);
				fileRefs.browse(allTypes); 
				
			}
			
			//用户选择的文件,如果需要判断是否可以多次选择同名的文件可以在这里判断
			private function fileSelectHandler(event: Event): void
			{
				for each (var f: FileReference in fileRefs.fileList)
				{
					var mf:MyFile = new MyFile(f);
					selectedFiles.addItem(mf);
				}
			}
			
			//出错后的处理
			private function ioErrorHandler(e:IOErrorEvent): void
			{
				Alert.show(e.text);
				Alert.show("请检查网络或程序是否正常,请删除上传不成功的jar,重新选择后上传!");
				selectFileButton.enabled=true;
				cleanAll.enabled=true;
				deleteenabled=true;
			}
			
			//删除列表中的文件
			public function removeFile(mf: MyFile): void
			{
				var index: int = selectedFiles.getItemIndex(mf);
				if (index != -1)
					selectedFiles.removeItemAt(index);
			}
			
			//初始化组件或应用程序
			protected function group_creationCompleteHandler(event:FlexEvent):void
			{
				init();
			}
			
			//确认上传的文件
			protected function button1_clickHandler(event:MouseEvent):void
			{
				Alert.show("开始上传后不能更改选择的jar包 ,确定上传?", 
					"确认上传", 
					Alert.YES|Alert.NO, 
					null, 
					startUpload); 
			}
			
			//根据业务的需求上传后不能更改,可以根据自己的业务逻辑去改相应的处理
			private function startUpload(e: CloseEvent): void{ 
				
				if (e.detail == Alert.YES){ 
					selectFileButton.enabled=false;
					cleanAll.enabled=false;
					deleteenabled=false;
					singleThreadFiles = selectedFiles.toArray().concat();
					
					for(var i:int=0;i<singleThreadFiles.length;i++)
					{
						if(singleThreadFiles[i] is MyFile)
						{
							var mf:MyFile= singleThreadFiles[i] as MyFile;
							var f:FileReference=mf.fr;
							trace(f.name);
						}
					}
					singleThreadFiles.reverse();
					singleThreadUploadFile();
				}
			}
			
			//输出上传后的jar的信息,如果需要更多的信息可以在MyFlie类里找到
			private function showuploadjar():void
			{
				for(var i:int=0; i<selectedFiles.length;i++)
				{
					var mf:MyFile=selectedFiles.getItemAt(i) as MyFile;
//					Alert.show(mf.uploadFilePath+mf.uploadFileName);
					trace("上传后的路径:"+mf.uploadFilePath+mf.uploadFileName);
					mf.removeDateEvent();
				}
			}
			
		]]>
	</fx:Script>
	<s:VGroup paddingTop="10">
		<mx:VBox>
			<mx:HBox width="100%">
				<mx:Button id="selectFileButton" label="浏览" click="selectFile()"/>
				<mx:Box width="100%" horizontalAlign="right">
					<mx:Button  id="cleanAll" click="selectedFiles.removeAll();" label="清空"/>
				</mx:Box>
			</mx:HBox>
			<mx:DataGrid id="files" dataProvider="{selectedFiles}" >
				<mx:columns>
					<mx:DataGridColumn width="200" headerText="文件名" dataField="fr.name" />
					<mx:DataGridColumn width="100" headerText="大小(字节)" dataField="fr.size">
						<mx:itemRenderer>
							<fx:Component>
								<mx:Label text="{outerDocument.filesizeFormatter.format(data.size)}" textAlign="right"/>
							</fx:Component>
						</mx:itemRenderer>
					</mx:DataGridColumn>					
					<mx:DataGridColumn width="100" headerText="状态" dataField="uploadlable" />
					<mx:DataGridColumn headerText="删除" width="80">
						<mx:itemRenderer>
							<fx:Component>
								<mx:HBox fontSize="10" fontWeight="normal" fontThickness="1">
									<fx:Script>
										<![CDATA[
											protected function linkbutton1_clickHandler(event:MouseEvent):void
											{
												var mf:MyFile = data as MyFile;
												outerDocument.removeFile(mf);
											}
											
										]]>
									</fx:Script>
									<mx:LinkButton label="Delete"  click="linkbutton1_clickHandler(event)" enabled="{outerDocument.deleteenabled}">
									</mx:LinkButton>
								</mx:HBox>
							</fx:Component>
						</mx:itemRenderer>
					</mx:DataGridColumn>
					
				</mx:columns>
			</mx:DataGrid>
			<mx:HBox>
				<mx:Button label="上传" id="uploadbutton" click="button1_clickHandler(event)" />
				<s:Label paddingTop="7" id="uploadtext" text="" />
			</mx:HBox>
		</mx:VBox>
	</s:VGroup>
</s:Application>

param.ItemDate = (this.parameters.ItemDate == undefined || this.parameters.ItemDate == "") ? 31457280 : this.parameters.ItemDate;//ItemDate单文件大小限制,-1表示不限制,默认值为30M param.TotalDate = (this.parameters.TotalDate == undefined || this.parameters.TotalDate == "") ? -1 : this.parameters.TotalDate;//TotalDate总文件大小限制,-1表示不限制,默认值为-1 param.TotalCount = (this.parameters.TotalCount == undefined || this.parameters.TotalCount == "") ? 50 : this.parameters.TotalCount;//TotalCount总上传文件数量限制,-1表示不限制,默认值为50 param.Ext = (this.parameters.Ext == undefined || this.parameters.Ext == "") ? "*.*" : this.parameters.Ext;//上传文件类型类型限制,空值表示不限制,默认值为*.* param.CallbackOnOneCompleted = this.parameters.funOneCompleted == undefined ? "" : this.parameters.funOneCompleted;//回调的js函数 param.CallbackOnEnd = this.parameters.funEnd == undefined ? "" : this.parameters.funEnd;//回调的js函数 param.CallbackOnProgressChange = this.parameters.funProgress == undefined ? "" : this.parameters.funProgress;//回调的js函数 param.CallbackOnError = this.parameters.funError == undefined ? "" : this.parameters.funError;//回调的js函数 param.CallbackOnSelected = this.parameters.funSelected == undefined ? "" : this.parameters.funSelected;//回调的js函数 param.CallbackMessage = this.parameters.funMessage == undefined ? "" : this.parameters.funMessage;//回调的js函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值