`
fengzheng0603
  • 浏览: 73039 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

flex上传多个文件

阅读更多

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

运行后的样子:

uploadgrid.mxm 上传jar的类,

<?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>

 

自己封装as类MyFile.as:用于存储上传后的信息。

 

package outsideSys.windows
{
    import flash.events.DataEvent;
    import flash.events.Event;
    import flash.events.ProgressEvent;
    import flash.net.FileReference;
    
    
    /**
     * @author
     * 描述:
     * 创建时间:2012-12-4 下午2:01:56
     */
    [Bindable]
    public class MyFile
    {
        
        
        private var  _uploadFileName:String;
        
        private var _uploadFilePath:String;
        
        private var _uploadIsSuceess:Boolean;
        
        private var _uploadProgress:uint;
        
        private var _uploadlable:String="等待上传";
        
        private var  _fr:FileReference;
        
        public function MyFile(f:FileReference)
        {
            super();    
            this.fr=f;
            _fr.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,uploadcomplete);
//            _fr.addEventListener(ProgressEvent.PROGRESS,funcuploadProgress);
        }
        
        public function removeDateEvent():void
        {
            _fr.removeEventListener(DataEvent.UPLOAD_COMPLETE_DATA,uploadcomplete);
        }
        
        
        protected  function uploadcomplete(event: DataEvent): void
        {
            //服务器端一定要返回数据,否则,这个方法就不起作用了
            var uploadInfo:String=event.data;
            var uploadInfoArray:Array = uploadInfo.split("#");    
            if(uploadInfoArray[0]=="true")
            {
                this.uploadIsSuceess=true;
                this.uploadFilePath=uploadInfoArray[1];
                this.uploadFileName=uploadInfoArray[2];
                this.uploadlable=uploadInfoArray[3];
                //trace(uploadlable);
                trace(uploadFileName+"完成2");
            }
            
        }
        
        
        
//        protected  function funcuploadProgress(event: ProgressEvent): void
//        {
//            this.uploadProgress = event.bytesLoaded / event.bytesTotal * 100;
//        }
        
        
        public function get uploadlable():String
        {
            return _uploadlable;
        }
        
        public function set uploadlable(value:String):void
        {
            _uploadlable = value;
        }
        
        public function get fr():FileReference
        {
            return _fr;
        }
        
        public function set fr(value:FileReference):void
        {
            _fr = value;
        }
        
        public function get uploadProgress():uint
        {
            return _uploadProgress;
        }
        
        public function set uploadProgress(value:uint):void
        {
            _uploadProgress = value;
        }
        
        public function get uploadIsSuceess():Boolean
        {
            return _uploadIsSuceess;
        }
        
        public function set uploadIsSuceess(value:Boolean):void
        {
            _uploadIsSuceess = value;
        }
        
        public function get uploadFilePath():String
        {
            return _uploadFilePath;
        }
        
        public function set uploadFilePath(value:String):void
        {
            _uploadFilePath = value;
        }
        
        public function get uploadFileName():String
        {
            return _uploadFileName;
        }
        
        public function set uploadFileName(value:String):void
        {
            _uploadFileName = value;
        }
        
    }
}


后台的java代码FileUploaded.java:

 

 

package com.web.action;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import com.system.constants.PropertiesFile;
import com.system.util.PropertiesAnalysis;

//import com.system.constants.PropertiesFile;
//import com.system.util.PropertiesAnalysis;



/**
 *
 * @author crystal
 */
public class FileUploaded extends HttpServlet {

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     */
    // 定义文件的上传路径
//    private String uploadPath = PropertiesAnalysis.findProperties(PropertiesFile.DEPLOYXONFIG, "jarpath");
    private String uploadPath = "D://jarfile//";

// 限制文件的上传大小
    private int maxPostSize = 100 * 1024 * 1024;

    public FileUploaded() {
        super();
    }

    public void destroy() {
        super.destroy();
    }

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        System.out.println("Access !");
        response.setContentType("text/html;charset=UTF-8");
        request.setCharacterEncoding("UTF-8");
        PrintWriter out = response.getWriter();

        //保存文件到服务器中
        DiskFileItemFactory factory = new DiskFileItemFactory();
        factory.setSizeThreshold(4096);
        ServletFileUpload upload = new ServletFileUpload(factory);
        upload.setSizeMax(maxPostSize);
        try {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			String date=sdf.format(new Date());	
			String jaruploadPath=uploadPath+date+"\\";
			File file = new File(jaruploadPath);
			 //判断文件夹是否存在,如果不存在则创建文件夹
			 if (!file.exists()) {
			   file.mkdir();
			 }
            List fileItems = upload.parseRequest(request);
            Iterator iter = fileItems.iterator();
            while (iter.hasNext()) {
                FileItem item = (FileItem) iter.next();
                if (!item.isFormField()) {
                    String name = item.getName();
                    System.out.println(name);
                    String newname=name.split(".jar")[0]+new Date().getTime()+".jar";
                    
                    try {
                        item.write(new File(jaruploadPath + newname));
                        //我输出的格式:true|flase#文件路径#文件名#是否成功的信息,用#号隔开的。
                        response.getWriter().write("true#"+jaruploadPath+"#"+newname+"#上传成功。");
                    } catch (Exception e) {
                        e.printStackTrace();
                        response.getWriter().write("false#"+e.getMessage());
                    }
                }
            }
        } catch (FileUploadException e) {
            e.printStackTrace();
            response.getWriter().write(e.getMessage());
            System.out.println("false#"+e.getMessage() + "结束"); 
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     */
    public String getServletInfo() {
        return "Short description";
    }
    // </editor-fold>
}

 

web.xml中的xml配置文件:

 

 

    <!-- flex 文件上传 -->
    <servlet>  
        <servlet-name>FileUploaded</servlet-name>  
        <servlet-class>com.web.action.FileUploaded</servlet-class>  
    </servlet>  
 
    <servlet-mapping>  
        <servlet-name>FileUploaded</servlet-name>  
        <url-pattern>/FileUploaded</url-pattern>  
    </servlet-mapping> 

 

 

 

 

 

  • 大小: 12 KB
分享到:
评论

相关推荐

    Flex 上传多个文件

    在Flex中处理文件上传,特别是上传多个文件,是一个常见的需求,特别是在构建支持用户上传大量数据的应用程序时。 在Flex中实现多文件上传,首先需要理解FileReference类。FileReference是Flash Player提供的一个...

    flex实现多文件上传

    `FileReference`允许用户从本地文件系统中选择一个或多个文件。在用户选择文件后,我们可以监听`select`事件来获取选中的文件列表。 ```actionscript var fileRefList:FileReferenceList = new FileReferenceList()...

    Flex 多文件上传组件

    Flex多文件上传组件是一种在Adobe Flex环境中实现的高级功能,允许用户一次性选择并上传多个文件。这个组件在Web应用程序中非常实用,特别是在处理大量图片、文档或其他类型文件上传的场景下,大大提升了用户体验。 ...

    flex 多文件上传

    "flex 多文件上传"是指使用Adobe Flex框架实现的能够同时上传多个文件的功能。Flex是一款强大的RIA(富互联网应用)开发工具,它基于ActionScript编程语言和Flash Player运行时环境,提供丰富的用户界面组件和交互...

    Flex多文件上传+md5验证文件是否上传

    标题“Flex多文件上传+md5验证文件是否上传”揭示了该技术的核心要点:使用Flex来处理多个文件的上传,并通过MD5哈希校验确保上传的文件与原始文件一致,防止数据篡改。 1. **多文件上传**:在Flex中,可以利用...

    flex文件上传下载,在线以pdf形式浏览文件

    综上所述,实现"flex文件上传下载,在线以pdf形式浏览文件"这一功能,需要综合运用前端开发、后端接口设计、文件处理和安全策略等多个领域的知识,为用户提供便捷、安全的文件管理体验。在实际开发过程中,还需要...

    Flex 上传文件控件 (带java服务端)

    若要支持多文件上传,需要使用`FileReferenceList`类,它是一个包含多个`FileReference`对象的集合,用户可以选择并上传多个文件。 3. **设置上传大小限制**:在客户端,可以通过`FileReference`的`setUploadSize()...

    Flex文件上传的组件

    在Flex中,这种组件通常会显示一个文件选择对话框,让用户选择要上传的文件,并且会提供一个进度条来显示上传进度,增强用户体验。 Flex是一个开源的框架,用于构建富互联网应用(RIA),它使用MXML和ActionScript...

    flex+java文件上传

    综上所述,"flex+java文件上传"涉及到前端的Flex界面设计与交互、Flash Player运行环境、后端的Java处理逻辑以及文件上传的安全性和性能优化等多个知识点。在实际应用中,开发者需要结合这些技术来实现稳定、安全且...

    asp.net+flex批量上传文件

    将ASP.NET和Flex结合,我们需要在Flex客户端创建一个UI,让用户能够选择多个文件并触发上传。在用户选择文件后,Flex会将文件作为二进制流发送到服务器端的ASP.NET接口。服务器端的ASP.NET接口接收这些流,然后进行...

    Flex文件上传(某GIS系统,我负责的文件上传部分)

    例如,`FileReferenceList`类支持一次选择多个文件,`FileReference`的`upload()`方法可以接受参数来实现断点续传。 8. **安全考虑**:为了防止恶意文件上传,应限制可上传的文件类型和大小。同时,服务端需要对...

    flash上传文件,flex上传,无刷新上传,php上传,含源码

    Flash组件可以直接访问用户的本地文件系统,允许用户选择多个文件并一次性上传,提高了用户体验。在这个项目中,"upload.swf"就是使用Flash技术编译的SWF文件,它是前端上传界面的核心部分,能够处理用户的文件选择...

    Flex文件上传组件

    FileReference提供了一种与用户系统文件系统交互的方式,用户可以选择一个或多个文件,并通过FileReference对象执行读取、保存或上传操作。 2. **事件监听**:在文件上传过程中,我们需要监听FileReference对象上的...

    flex+java文件上传完整实例

    1. **FileReference类**:Flex中的FileReference类是与文件操作相关的基础,它允许用户选择一个或多个文件,并提供了读取、保存和上传文件的功能。 2. **事件监听**:在用户选择文件后,我们需要监听DataEvent....

    flex3 java 文件上传源码

    3. **事件监听**:FileReference对象支持多个事件,如“select”(文件选择后触发)、“data”(文件数据加载时触发)和“complete”(上传完成时触发)。通过监听这些事件,可以控制用户界面的更新。 4. **...

    flex多文件上传 asp.net实例

    在多文件上传场景中,Flex可以提供用户友好的界面,允许用户选择并上传多个文件。 在Flex中,我们可以利用`FileReference`类来处理文件上传。`FileReference`类提供了选择、读取和上传本地文件的方法。当用户选择...

    FLEX上传文件,flex upload

    在Flex中,可以实现单个文件或多个文件的上传。这里提到的“SWFUpload”是一个流行的JavaScript库,它与Flash Player结合使用,允许在浏览器中实现复杂的文件上传功能,包括多文件选择和进度条显示。虽然SWFUpload...

    Flex多文件上传

    Flex多文件上传是一种在Web应用中实现用户同时上传多个文件的技术。这个小demo是使用Adobe Flash Builder 4.0作为开发环境,结合Java Servlet后端处理来完成的。Flash Builder是一款强大的集成开发环境(IDE),专门...

    flex文件上传下载

    - **多文件上传**:通过创建多个`FileReference`对象,可以实现多文件同时上传,提高用户体验。 - **文件类型验证**:在用户选择文件时,可以通过`FileReference`的`type`属性检查文件类型,避免非法文件的上传。 ...

    flex上传文件夹插件

    此外,服务器端也需要相应的接收和处理文件的逻辑,这可能涉及到文件存储、大小限制、文件类型检查等多个方面。 总的来说,"flex上传文件夹插件"是提升Flex应用上传功能的有效解决方案,尤其适合需要批量上传文件的...

Global site tag (gtag.js) - Google Analytics