Flex、java实现文件上传

FileUpload.java:

[java]  view plain copy print ?
  1. import java.io.File;  
  2. import java.io.IOException;  
  3. import java.io.PrintWriter;  
  4. import java.util.Iterator;  
  5. import java.util.List;  
  6. import javax.servlet.ServletException;  
  7. import javax.servlet.http.HttpServlet;  
  8. import javax.servlet.http.HttpServletRequest;  
  9. import javax.servlet.http.HttpServletResponse;  
  10. import org.apache.commons.fileupload.FileItem;  
  11. import org.apache.commons.fileupload.FileUploadException;  
  12. import org.apache.commons.fileupload.disk.DiskFileItemFactory;  
  13. import org.apache.commons.fileupload.servlet.ServletFileUpload;  
  14. @SuppressWarnings("serial")  
  15. public class FileUpload extends HttpServlet   
  16. {  
  17.     //定义文件上传的路径  
  18.     private String uploadPath = "d://a//";  
  19.       
  20.     private int maxPostSize = 100*1024*1024;  
  21.     public FileUpload()   
  22.     {  
  23.         super();  
  24.     }  
  25.     public void destroy()   
  26.     {  
  27.         super.destroy();   
  28.     }  
  29.       
  30.     @SuppressWarnings("unchecked")  
  31.     protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException  
  32.     {  
  33.         System.out.println("Access!");  
  34.         response.setContentType("text/html;charset=UTF-8");  
  35.         PrintWriter out = response.getWriter();  
  36.         out.print("已连接上!");  
  37.           
  38.         //保存文件到服务器中  
  39.         DiskFileItemFactory factory = new DiskFileItemFactory();  
  40.         factory.setSizeThreshold(4096);  
  41.         ServletFileUpload upload = new ServletFileUpload(factory);  
  42.         upload.setSizeMax(maxPostSize);  
  43.         try  
  44.         {  
  45.             List fileItems = upload.parseRequest(request);  
  46.             Iterator iter = fileItems.iterator();  
  47.             while(iter.hasNext())  
  48.             {  
  49.                 FileItem item = (FileItem)iter.next();  
  50.                 if(!item.isFormField())  
  51.                 {  
  52.                     String name = item.getName();  
  53.                     System.out.println(name);  
  54.                     try  
  55.                     {  
  56.                         item.write(new File(uploadPath+name));  
  57.                     }  
  58.                     catch(Exception e)  
  59.                     {  
  60.                         e.printStackTrace();  
  61.                     }  
  62.                 }  
  63.             }  
  64.         }  
  65.         catch(FileUploadException e)  
  66.         {  
  67.             e.printStackTrace();  
  68.             System.out.println(e.getMessage()+"结束");  
  69.         }  
  70.     }  
  71.     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException   
  72.     {  
  73.         processRequest(request, response);  
  74.     }  
  75.     public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException   
  76.     {  
  77.         processRequest(request, response);  
  78.     }  
  79. }  

 

FileUpload.mxml

[c-sharp]  view plain copy print ?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">  
  3.     <mx:Script>  
  4.         <![CDATA[  
  5.             import flash.net.FileReference;  
  6.             import mx.controls.Alert;  
  7.             import mx.events.CloseEvent;  
  8.             import flash.events.*;  
  9.               
  10.             private var file:FileReference;  
  11.               
  12.             private function init():void  
  13.             {  
  14.                 Security.allowDomain("*");  
  15.                 file = new FileReference();  
  16.                 file.addEventListener(ProgressEvent.PROGRESS, onProgress);  
  17.                 file.addEventListener(Event.SELECT, onSelect);  
  18.                 file.addEventListener(Event.COMPLETE, completeHandle);  
  19.             }  
  20.               
  21.             private function completeHandle(event:Event):void  
  22.             {  
  23.                 Alert.show("恭喜你,上传成功");  
  24.             }  
  25.               
  26.             private function upload():void  
  27.             {  
  28.                 var imageTypes:FileFilter = new FileFilter("Images (*.jpg, *.jpeg, *.png)","*.jpg;*.jpeg;*.png");  
  29.                 var allTypes:Array = new Array(imageTypes);  
  30.                 file.browse(allTypes);  
  31.                 //file.browse();  
  32.             }  
  33.               
  34.             private function onSelect(e:Event):void  
  35.             {  
  36.                 Alert.show("上传 " + file.name + " (共 " + Math.round(file.size) + " 字节)?","确认上传",Alert.YES|Alert.NO,null,proceedWithUpload);  
  37.             }  
  38.               
  39.             private function onProgress(e:ProgressEvent):void  
  40.             {  
  41.                 lbProgress.text = "已上传 "+e.bytesLoaded + " 字节,共 "+e.bytesTotal+" 字节";  
  42.                 var proc:uint = e.bytesLoaded/e.bytesTotal*100;  
  43.                 bar.setProgress(proc,100);  
  44.                 bar.label = "当前进度: "+" "+proc + "%";  
  45.             }  
  46.               
  47.             private function proceedWithUpload(e:CloseEvent):void  
  48.             {  
  49.                 if(e.detail == Alert.YES)  
  50.                 {  
  51.                     var request:URLRequest = new URLRequest("http://localhost:8080/FileUpload/servlet/FileUpload");  
  52.                     try  
  53.                     {  
  54.                         file.upload(request);  
  55.                     }  
  56.                     catch(error:Error)  
  57.                     {  
  58.                         Alert.show("上传失败");  
  59.                     }  
  60.                 }  
  61.             }  
  62.         ]]>  
  63.     </mx:Script>  
  64.     <mx:Canvas width="100%" height="100%" x="10" y="170" fontSize="12">  
  65.         <mx:VBox width="100%" horizontalAlign="center">  
  66.             <mx:Label id="lbProgress" text="上传" />  
  67.             <mx:ProgressBar id="bar" labelPlacement="bottom" themeColor="#F20D7A" minimum="0" visible="true" maximum="100" label="当前进度: 0%" direction="right" mode="manual" width="200" />  
  68.             <mx:Button label="上传文件" click="upload()" />  
  69.         </mx:VBox>  
  70.     </mx:Canvas>  
  71. </mx:Application>  

 

配置到tomcat上的时候,要在web-inf/lib里面要加入连个包:

  1. commons-fileupload-1.2.1.jar
  2. commons-io-1.4.jar

这两个包在网上很容易下载到。加入包以后要修改web.xml,在跟下加入下面servlet声明:

[xhtml]  view plain copy print ?
  1. <servlet>  
  2.     <servlet-name>FileUpload</servlet-name>  
  3.     <servlet-class>FileUpload</servlet-class>  
  4. </servlet>  
  5. <servlet-mapping>  
  6.     <servlet-name>FileUpload</servlet-name>  
  7.     <url-pattern>/servlet/FileUpload</url-pattern>  
  8. </servlet-mapping>  

我的文件是上传到D盘的a文件夹,要确保该目录存在。上传个图片试试吧!

你可能感兴趣的:(Flex、java实现文件上传)