Flex和Servlet结合上传文件

来源:互联网 发布:怎么开淘宝 编辑:程序博客网 时间:2024/06/06 12:41

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文件夹



1 0
原创粉丝点击