现在的位置: 首页 > 综合 > 正文

flex 文件上传

2014年01月22日 ⁄ 综合 ⁄ 共 8980字 ⁄ 字号 评论关闭

 网上查找的有关于flex 文件上传的结果。

 

一、下面及个重要的类及方法(来自:http://mcs.sysu.edu.cn/user/longt/Article_2081

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. DiskFileUpload类

      (1)setSizeMax(long sizeMax):

            设置请求实体的最大限定值,防止客户端故意通过上传特大文件塞满服务器.

      (2)setSizeThreshold(int sizeThreshold):

            Apache文件上传组件在解析和处理上传数据中的每个字段内容时,需要临时保存解析出的数据。

      (3)setRepositoryPath(String path):

            设置setSizeThreshold方法中提到的临时文件的存放目录,这里使用绝对路径。

      (4)parseRequest(HttpServerletRequest request)

         ParseRequest(HttpServerletRequest request,int sizeThreshold,long sizeMax,String path)

         是对HTTP请求消息进行解析的入口,需要Http请求必须是"multipart/form-data"类型.

         该方法解析出Form表单中的每个字段的数据,并将它们分别包装成独立的FileItem对象加进一个List

      类型的集合对象。

     

      (5)setHeaderEncoding(String encode)

         设置编码的方法,中文乱码处理需要用此方法.中文的编码一般用"gb2312"作为参数.

  
2. FileItem 类

      (1) isFormField()

           判断FileItem类对象封装的数据是否属于一个普通表单字段,还是属于一个文件表单字段。

           普通表单字段 ---- return true;

           文件表单字段 ---- return false;

     

      (2) getName()

            用于获取文件上传字段中的含路径的文件名。

            需要注意的是用户如果没有通过文件表单传递文件,浏览器同样也会将文件字段和信息传递给服务器,

        只是文件名和文件内容部分都为空,但这个表单字段仍然对应一个FileItem对象。此时getName()返回的是

        一个空字符串"".



      (3) getFieldName()

            用于返回表单字段元素的name属性值.



      (4) write(File file)

            该方法用于将FileItem对象中保存的主题内容保存到某个指定的文件中.该方法也可以将普通表单字          段内容写入到一个文件中,但是它的主要用途是将上传的文件内容保存到本地文件系统中。


      (5) getString()方法

            用于将FileItem对象中保存的主体内容作为一个字符串返回。


      (6)getContentType()方法

            获得上传文件的类型,即文件的后缀。如果FileItem类对象对应的是普通表单字段,返回null.


      (7)delete()方法

            用来清空FileItem类对象中存放的主体内容,如果主体内容保存在临时文件中,delete方法将删除该         临时文件。

 

      其余API,参考:http://commons.apache.org/fileupload/apidocs/index.html 

 

二、相关代码

1、FileUploadDemo4.mxml

Code:
  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="initApp();"  
  5.                xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">  
  6.     <fx:Declarations>  
  7.         <!-- 将非可视元素(例如服务、值对象)放在此处 -->  
  8.     </fx:Declarations>  
  9.     <fx:Script>  
  10.         <![CDATA[ 
  11.             import mx.controls.Alert; 
  12.             import mx.core.mx_internal; 
  13.             import mx.events.CloseEvent; 
  14.              
  15.             //FileReference 类提供了在用户计算机和服务器之间上载和下载文件的方法 
  16.             private var file:FileReference = null; 
  17.              
  18.             //定义过滤器 
  19.             private var imgFilter:FileFilter = new FileFilter("Images(*.jpg;*.png;*.gif;)", "*.jpg;*.png;*.gif;"); 
  20.             private var txtFilter:FileFilter = new FileFilter("Files(*.pdf;*.txt;*.doc)", "*.pdf;*.txt;*.doc"); 
  21.             private var allFilter:FileFilter = new FileFilter("All(*)", "*.*"); 
  22.              
  23.             private function initApp():void { 
  24.                 try { 
  25.                     //允许所标识的域中的 SWF 文件访问包含 allowDomain() 调用的 SWF 文件中的对象和变量。 
  26.                     Security.allowDomain("*"); 
  27.                     file = new FileReference(); 
  28.                     //当用户从文件浏览对话框选择要上载或下载的文件时分派。 
  29.                     file.addEventListener(Event.SELECT, selectEventHandle); 
  30.                     //在文件上载或下载操作期间定期分派。 
  31.                     file.addEventListener(ProgressEvent.PROGRESS, progressEventHandle);  
  32.                     //当下载操作完成或上载操作生成 HTTP 状态代码 200 时分派。 
  33.                     file.addEventListener(Event.COMPLETE, completeEventHandle); 
  34.                     //当上载或下载失败时分派。       
  35.                     file.addEventListener(IOErrorEvent.IO_ERROR, ioErrorEventHandle); 
  36.                      
  37.                 } catch(err:ErrorEvent) { 
  38.                     Alert.show("文件上传出错..."); 
  39.                 } 
  40.                  
  41.             } 
  42.              
  43.             private function selectEventHandle(evt:Event):void { 
  44.                 Alert.show("上传" + file.name + "总" + Math.round(file.size) + "字节。" , "确认书上传",  
  45.                     Alert.YES|Alert.NO, null, 
  46.                     processUpload); 
  47.             } 
  48.              
  49.             private function progressEventHandle(evt:ProgressEvent):void { 
  50.                 lblProgress.text = "已上传" + evt.bytesLoaded +"字节,总" + evt.bytesTotal + "字节。";  
  51.                 var value:uint = evt.bytesLoaded / evt.bytesTotal * 100; 
  52.                 bar.setProgress(value, 100); 
  53.                 bar.label = "当前进度" + value + "%"; 
  54.             } 
  55.                  
  56.             private function completeEventHandle(evt:Event):void { 
  57.                 Alert.show("文件上传成功.."); 
  58.             } 
  59.              
  60.              
  61.             private function processUpload(evt:CloseEvent):void { 
  62.                 if(evt.detail == Alert.YES) { 
  63.                     var reqest:URLRequest = new URLRequest("http://localhost:8080/FileUploadDemo4/fileUpload"); 
  64.                     try { 
  65.                         file.upload(reqest); 
  66.                     } catch(error:Error) { 
  67.                         Alert.show("error..."); 
  68.                     } 
  69.                 } 
  70.             } 
  71.              
  72.             private function ioErrorEventHandle(evt:IOErrorEvent):void { 
  73.                 Alert.show("ioerror: " + evt.toString()); 
  74.             } 
  75.              
  76.             private function upload():void { 
  77.                 var acFilter:Array = new Array(); 
  78.                 acFilter.push(imgFilter); 
  79.                 acFilter.push(txtFilter); 
  80.                 acFilter.push(allFilter); 
  81.                 file.browse(acFilter); 
  82.             } 
  83.         ]]>  
  84.     </fx:Script>  
  85.       
  86.     <mx:VBox width="100%" height="100%" horizontalAlign="center" verticalAlign="middle">  
  87.         <mx:Label id="lblProgress" text="上传" />  
  88.         <mx:ProgressBar id="bar" mode="manual" labelPlacement="top" label="当前进度"   
  89.                         direction="right" maximum="100" minimum="0"/>  
  90.         <mx:Button id="load" label="upLoad" click="upload();"/>  
  91.     </mx:VBox>  
  92. </s:Application>  

2、服务端的java代码

Code:
  1. package onlyfun.gray;  
  2.   
  3. import java.io.File;  
  4. import java.io.IOException;  
  5. import java.io.PrintWriter;  
  6. import java.util.Iterator;  
  7. import java.util.List;  
  8.   
  9. import javax.servlet.ServletException;  
  10. import javax.servlet.http.HttpServlet;  
  11. import javax.servlet.http.HttpServletRequest;  
  12. import javax.servlet.http.HttpServletResponse;  
  13.   
  14. import org.apache.commons.fileupload.FileItem;  
  15. import org.apache.commons.fileupload.FileUploadException;  
  16. import org.apache.commons.fileupload.disk.DiskFileItemFactory;  
  17. import org.apache.commons.fileupload.servlet.ServletFileUpload;  
  18.   
  19. public class FileUpload extends HttpServlet {  
  20.   
  21.     private String path = "d:/a/";  
  22.     private int maxSize = 100 * 1024 * 1024;  
  23.   
  24.     public FileUpload() {  
  25.         // TODO Auto-generated constructor stub  
  26.         super();  
  27.     }  
  28.   
  29.     @Override  
  30.     public void destroy() {  
  31.         // TODO Auto-generated method stub  
  32.         super.destroy();  
  33.     }  
  34.   
  35.     @Override  
  36.     protected void doGet(HttpServletRequest req, HttpServletResponse resp)  
  37.             throws ServletException, IOException {  
  38.         // TODO Auto-generated method stub  
  39.         doPost(req, resp);  
  40.     }  
  41.   
  42.     @Override  
  43.     protected void doPost(HttpServletRequest req, HttpServletResponse resp)  
  44.             throws ServletException, IOException {  
  45.         // TODO Auto-generated method stub  
  46.           
  47.         //设置编码  
  48.         req.setCharacterEncoding("utf-8");  
  49.         resp.setContentType("text/html;charset=utf-8");  
  50. //      PrintWriter pw = resp.getWriter();  
  51.   
  52.         //DiskFileItemFactory是创建FileItem对象的工厂  
  53.         DiskFileItemFactory factory = new DiskFileItemFactory();  
  54.         //设置内存缓冲区的大小,默认值为10K。  
  55.         factory.setSizeThreshold(4096);  
  56.   
  57.         //ServletFileUpload 负责处理上传的文件数据,并将表单中每个输入项封装到一个FileItem对象中  
  58.         ServletFileUpload upload = new ServletFileUpload(factory);  
  59.           
  60.         //setSizeMax(long sizeMax),设置上传文件总量的最大值。  
  61.         upload.setSizeMax(maxSize);  
  62.   
  63.         try {  
  64.             // 解析保存在request中的数据并返回list集合  
  65.             List fileItems = upload.parseRequest(req);  
  66.               
  67.             // 遍历list集合,取出每一个输入项的FileItem对象,并分别获取数据  
  68.             Iterator it = fileItems.iterator();  
  69.             while (it.hasNext()) {  
  70.                 FileItem item = (FileItem) it.next();  
  71.                 //判断FileItem类对象封装的数据是否属于一个普通表单字段,还是属于一个文件表单字段。  
  72.                 // 普通表单字段 ---- return true;  
  73.                 //文件表单字段 ---- return false;  
  74.                 if (!item.isFormField()) {  
  75.                     System.out.println("file name: " + item.getName());  
  76.                     //该方法用于将FileItem对象中保存的主题内容保存到某个指定的文件中  
  77.                     item.write(new File(path + item.getName()));  
  78.                 }  
  79.             }  
  80.         } catch (FileUploadException e) {  
  81.             // TODO Auto-generated catch block  
  82.             e.printStackTrace();  
  83.         } catch (Exception e) {  
  84.             // TODO Auto-generated catch block  
  85.             e.printStackTrace();  
  86.         }  
  87.     }  
  88.       
  89.       
  90. }  

3、web.xml中添加 servlet的关联映射

Code:
  1.     <servlet>  
  2.         <servlet-name>fileUpload</servlet-name> 
  3.         <servlet-class>onlyfun.gray.FileUpload</servlet-class>  
  4.     </servlet>  
  5.       
  6.     <servlet-mapping>  
  7.         <servlet-name>fileUpload</servlet-name>  
  8.         <url-pattern>/fileUpload</url-pattern>  
  9.     </servlet-mapping>  

 

 

抱歉!评论已关闭.