• Flex和Servlet结合上传文件


    Flex和Servlet结合上传文件


    1、准备工作

    (1)下载文件上传的组件,commons-fileupload-1.3.1.jar

    (2)下载文件输入输出jar,commons-io-2.4.jar

    (3)有关servlet的jar包,servlet-api.jar


    2、正式开发

    (1)新建一个web项目工程,FlexFileUpload

    (2)在src新建一个上传文件的servlet

    FlexFileUploadServlet.java:

    package com.you.upload.servlet;
    
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    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.FileItemFactory;
    import org.apache.commons.fileupload.FileUploadException;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
    
    public class FlexFileUploadServlet extends HttpServlet 
    {
    	/**
    	 * @Fields serialVersionUID:序列化
    	 */
    	private static final long serialVersionUID = -6839362803884547766L;
    
    	/**
    	 * Constructor of the object.
    	 */
    	public FlexFileUploadServlet() 
    	{
    		super();
    	}
    
    	/**
    	 * Destruction of the servlet. <br>
    	 */
    	public void destroy() 
    	{
    		super.destroy(); // Just puts "destroy" string in log
    		// Put your code here
    	}
    
    	/**
    	 * The doGet method of the servlet. <br>
    	 * 
    	 * This method is called when a form has its tag value method equals to get.
    	 * 
    	 * @param request
    	 *            the request send by the client to the server
    	 * @param response
    	 *            the response send by the server to the client
    	 * @throws ServletException
    	 *             if an error occurred
    	 * @throws IOException
    	 *             if an error occurred
    	 */
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException 
    	{
    		super.doGet(request, response);
    		doPost(request, response);
    	}
    
    	/**
    	 * The doPost method of the servlet. <br>
    	 * 
    	 * This method is called when a form has its tag value method equals to
    	 * post.
    	 * 
    	 * @param request
    	 *            the request send by the client to the server
    	 * @param response
    	 *            the response send by the server to the client
    	 * @throws ServletException
    	 *             if an error occurred
    	 * @throws IOException
    	 *             if an error occurred
    	 */
    	@SuppressWarnings("rawtypes")
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException 
    	{
    		/**
    		 * 防止中文乱码
    		 */
    		response.setContentType("text/html;charset=gb2312");
    		/**
    		 * 设置编码格式
    		 */
    		response.setCharacterEncoding("utf-8");
    		/**
    		 * 创建一个工厂类
    		 */
    		FileItemFactory factory = new DiskFileItemFactory();
    		/**
    		 * 上传对象
    		 */
    		ServletFileUpload upload = new ServletFileUpload(factory);
    		try {
    			List items = upload.parseRequest(request);
    			Iterator it = items.iterator();
    			while (it.hasNext()) 
    			{
    				FileItem item = (FileItem) it.next();
    				/**
    				 * 判断是表单域
    				 */
    				if (item.isFormField()) 
    				{
    					System.out.println("一个表单域");
    				} 
    				else 
    				{
    					/**
    					 * 处理文件上传
    					 */
    					System.out.println("不是一个表单域");
    					String fileName = item.getName();
    					byte[] data = item.get();
    					/**
    					 * 获取文件上传路径
    					 */
    					String file = getServletConfig().getInitParameter("file");
    					String fileFolderName = getServletContext().getRealPath(file + "\" + fileName);
    					try {
    						FileOutputStream fileOutSt = new FileOutputStream(fileFolderName);
    						try 
    						{
    							fileOutSt.write(data);
    							fileOutSt.close();
    						} 
    						catch (IOException exception) 
    						{
    							exception.printStackTrace();
    						}
    					} 
    					catch (FileNotFoundException exception) 
    					{
    						exception.printStackTrace();
    					}
    				}
    			}
    		} 
    		catch (FileUploadException exception) 
    		{
    			exception.printStackTrace();
    		}
    	}
    
    	/**
    	 * Initialization of the servlet. <br>
    	 * 
    	 * @throws ServletException
    	 *             if an error occurs
    	 */
    	public void init() throws ServletException 
    	{
    		// Put your code here
    	}
    
    }
    
    (3)配置web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.0" 
    	xmlns="http://java.sun.com/xml/ns/javaee" 
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
      <display-name></display-name>
      <servlet>
        <description>This is the description of my J2EE component</description>
        <display-name>This is the display name of my J2EE component</display-name>
        <servlet-name>FlexFileUploadServlet</servlet-name>
        <servlet-class>com.you.upload.servlet.FlexFileUploadServlet</servlet-class>
        <init-param>
            <description>上传文件临时路径</description>
            <param-name>file</param-name>
            <param-value>file</param-value>
        </init-param>
      </servlet>
    
      <servlet-mapping>
        <servlet-name>FlexFileUploadServlet</servlet-name>
        <url-pattern>/FlexFileUploadServlet</url-pattern>
      </servlet-mapping>	
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    </web-app>
    

    (4)打开Flash Builder,新建Flex项目

    FileUpload.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"
    			   width="100%" height="100%" creationComplete="initHandler()"
    			   fontSize="12" fontWeight="bold" accentColor="#94E1ED">
    	<fx:Style>
    		@namespace s "library://ns.adobe.com/flex/spark";
    		@namespace mx "library://ns.adobe.com/flex/mx";
    		Panel {  
    			borderStyle: solid;  
    			borderColor: #ff0000;  
    			borderAlpha: 0.5;  
    			borderThickness: 2;  
    			roundedBottomCorners: true;  
    			cornerRadius: 10;  
    			headerHeight: 50;  
    			backgroundAlpha: 0.5;  
    			highlightAlphas: 0.4, 0.24;  
    			headerColors: #cccc00, #cccc00;  
    			footerColors: #660033, #4217c2;  
    			backgroundColor: #00ffff;  
    			dropShadowEnabled: true;  
    			shadowDistance: 1;  
    			titleStyleName: "mypanelTitle";  
    		}  
    		
    		.mypanelTitle {  
    			letterSpacing: 1;  
    			color: #6600cc;  
    			textAlign: left;  
    			fontFamily: Trebuchet MS;  
    			fontSize: 16;  
    			fontWeight: bold;  
    			fontStyle: italic;  
    			textDecoration: underline;  
    		}  
    	</fx:Style>
    	<fx:Script>
    		<![CDATA[
    			import mx.collections.ArrayCollection;
    			import mx.controls.Alert;
    			import mx.events.FlexEvent;
    			
    			[Bindable]
    			//提示用户选择要上载的文件或用于下载的位置
    			private var fileRefer:FileReference;
    			
    			[Bindable]
    			//判断文件是否选中
    			private var fileSelected:Boolean;
    			
    			[Bindable]
    			//上传文件临时路径
    			private var serverURL:String = "http://localhost:8686/FlexFileUpload/FlexFileUploadServlet";
    			
    			private var stat:Array = new Array();
    			
    			[Bindable]
    			private var statusArray:ArrayCollection = new ArrayCollection();
    
    			/**
    			 * 初始化函数
    			 */
    			protected function initHandler():void
    			{
    				fileRefer = new FileReference();
    				fileRefer.addEventListener(Event.SELECT, onFileSelect); 
    				fileRefer.addEventListener(ProgressEvent.PROGRESS,onUploadProgress); 
    				fileRefer.addEventListener(Event.COMPLETE, onUploadComplete); 
    				fileRefer.addEventListener(IOErrorEvent.IO_ERROR, onUploadError); 
    				fileRefer.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onUploadError); 
    			}
    			
    			/**
    			 * 选择文件事件函数
    			 */
    			private function onFileSelect(event:Event):void 
    			{ 
    				fileSelected = true; 
    				fileTxt.text = fileRefer.name; 
    				stat.push({status:"准备上传 "+fileTxt.text});            
    				statusArray = new ArrayCollection(stat); 
    			} 
    			
    			/**
    			 * 正在上传事件函数 
    			 */
    			private function onUploadProgress(event:ProgressEvent):void 
    			{ 
    				stat.push({status:"进度.."+((event.bytesLoaded * 100) / event.bytesTotal).toString()+"%"}); 
    				statusArray = new ArrayCollection(stat); 
    			} 
    			
    			/**
    			 * 上传完全事件函数 
    			 */
    			private function onUploadComplete(event:Event):void 
    			{ 
    				stat.push({status:"上传成功!"}); 
    				statusArray = new ArrayCollection(stat); 
    			} 
    			
    			/**
    			 * 上传出现错误事件函数 
    			 */
    			private function onUploadError(event:Event):void 
    			{ 
    				if (event is IOErrorEvent) 
    				{ 
    					stat.push({status:"输入输出错误: "+(event as IOErrorEvent).text.toString()}); 
    					statusArray = new ArrayCollection(stat); 
    				} 
    				else if (event is SecurityErrorEvent) 
    				{ 
    					stat.push({status:"安全错误: "+(event as IOErrorEvent).text.toString()}); 
    					statusArray = new ArrayCollection(stat); 
    				} 
    			}
    
    			/**
    			 * 浏览按钮事件函数 
    			 */
    			protected function uploadBtn_clickHandler(event:MouseEvent):void
    			{
    				fileRefer.browse(); 
    			}
    
    			/**
    			 * 上传文件事件函数 
    			 */
    			protected function uploadClickHandler(event:MouseEvent):void
    			{
    				if (!fileSelected || (urlTxt.text.length == 0)) 
    				{ 
    					Alert.show("请选择一个文件并选择路径"); 
    					return; 
    				} 
    				var urlRequest:URLRequest = new URLRequest(urlTxt.text); 
    				fileRefer.upload(urlRequest);
    			}
    
    		]]>
    	</fx:Script>
    	<fx:Declarations>
    		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
    	</fx:Declarations>
    	
    	<s:Panel title="上传文件" horizontalCenter="0" verticalCenter="0" width="400" height="400" borderColor="#FFFFFF" backgroundColor="#D1EEEE">
    		<mx:VBox width="30%" height="40%" horizontalAlign="left" horizontalGap="0" paddingTop="5" paddingLeft="12">
    			<mx:HBox width="100%" height="10%" horizontalAlign="left">
    				<mx:VBox width="30%" height="100%" horizontalAlign="right" verticalAlign="middle">
    					<s:Label text="文件名:" width="80" fontWeight="bold"></s:Label>
    				</mx:VBox>
    				<mx:VBox width="40%" height="100%" horizontalAlign="left">
    					<s:TextInput id="fileTxt" width="200" editable="false" toolTip="选择上传文件"/>
    				</mx:VBox>
    				<mx:VBox width="30%" height="100%" horizontalAlign="left" verticalAlign="middle">
    					<s:Button id="uploadBtn" label="浏览..." click="uploadBtn_clickHandler(event)" width="80"/>
    				</mx:VBox>
    			</mx:HBox>
    			<mx:HBox width="100%" height="10%" horizontalAlign="left">
    				<mx:VBox height="100%" width="30%" horizontalAlign="left" verticalAlign="middle">  
    					<s:Label text="服务器路径:" width="80" fontWeight="bold"></s:Label>  
    				</mx:VBox>  
    				<mx:VBox height="100%" width="70%" horizontalAlign="left">  
    					<s:TextInput id="urlTxt" width="290" text="{serverURL}"/>  
    				</mx:VBox>  
    			</mx:HBox>
    			<mx:HBox height="10%" width="100%" horizontalAlign="center">  
    				<s:Button id="uploadBut" label="上传文件" click="uploadClickHandler(event)" enabled="{fileSelected}" />  
    			</mx:HBox>  
    			<mx:HBox height="70%" width="100%" horizontalAlign="center">  
    				<mx:DataGrid id="statusDG" width="100%" height="250" dataProvider="{statusArray}" variableRowHeight="true" wordWrap="true">  
    					<mx:columns>      
    						<mx:DataGridColumn dataField="status" headerText="上传文件状态" paddingLeft="0" paddingRight="0">  
    						</mx:DataGridColumn>  
    					</mx:columns>  
    				</mx:DataGrid>  
    			</mx:HBox>  
    		</mx:VBox>
    	</s:Panel>
    </s:Application>
    

    3、运行结果

    (1)初始化时



    (2)上传文件



    (3)上传文件之前服务器file文件夹



    (4)上传文件之后服务器file文件夹



  • 相关阅读:
    OGNL与值栈
    Struts2的数据封装
    Struts2页面配置和访问servlet API
    Struts2入门介绍(二)
    Struts2 入门介绍(一)
    Hibernate批量抓取
    Problem G: STL——整理唱片(list的使用)
    STL详细介绍(更新中~~~)
    Problem E: 数量的类模板
    CF: Long Number
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13315169.html
Copyright © 2020-2023  润新知