首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > flex >

Flex4之基于Servlet的文件下传

2012-10-21 
Flex4之基于Servlet的文件上传关于flex上传功能的实现依赖于FileReference类。该类实例对象的创建有两种方

Flex4之基于Servlet的文件上传

关于flex上传功能的实现依赖于FileReference类。该类实例对象的创建有两种方法:使用var myFileReference = new FileReference(); FileReferenceList.browse()。使用browse()或者FileReference.browse()方法可以打开上传窗口。

下面部分资源来自互联网,一个简单的上传组件代码,包括了监听ProgressEvent,选择的selectEvent和完成的completeEvent。为了避免硬编码,将urlRequest路径配置在一个xml里面,使用了httpservice进行请求,将结果用于UrlRequest的参数。这个HttpService采用了resultFormat="e4x",那么要求返回来值为XML类型的

?

Flex上传需要两个包apache common fileupload.jar和apache common io.jar
下载地址
http://jakarta.apache.org/commons/fileupload/

http://commons.apache.org/io/download_io.cgi

?

upload.mxml

?

?

config.xml

?

UploadServlet

package com.test.servlet;import java.io.File;   import java.io.IOException;   import java.io.PrintWriter;   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;     public class FileUploadServlet extends HttpServlet {       // 定义文件的上传路径       private String uploadPath = "c:\";       // 限制文件的上传大小       private int maxPostSize = 10000000 * 1024 * 1024;         protected void processRequest(HttpServletRequest request,               HttpServletResponse response) throws ServletException, IOException {           System.out.println("Access !");           System.out.println(uploadPath);           // 防止中文乱码           request.setCharacterEncoding("utf-8");           response.setContentType("text/html;charset=UTF-8");           PrintWriter out = response.getWriter();           // 保存文件到服务器中           DiskFileItemFactory factory = new DiskFileItemFactory();           factory.setSizeThreshold(4096);           ServletFileUpload upload = new ServletFileUpload(factory);           upload.setSizeMax(maxPostSize);           try {               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);                       try {                           item.write(new File(uploadPath + name));                           // SaveFile s = new SaveFile();                             // s.saveFile(name);                         } catch (Exception e) {                           e.printStackTrace();                       }                   }               }           } catch (FileUploadException e) {               e.printStackTrace();               System.out.println(e.getMessage() + "结束");           }       }         protected void doGet(HttpServletRequest request,               HttpServletResponse response) throws ServletException, IOException {           this.doPost(request, response);       }         protected void doPost(HttpServletRequest request,               HttpServletResponse response) throws ServletException, IOException {           processRequest(request, response);       }     }   

?

最后,说一下Flex的FileFilter 的用法

FileFilter 类用于指示在调用 FileReference.browse() 方法、FileReferenceList.browse() 方法或调用 File、FileReference 或 FileReferenceList 对象的 browse 方法时显示的文件浏览对话框中显示用户系统上的哪些文件。FileFilter 实例作为可选 typeFilter 参数的值传递给该方法。如果使用 FileFilter 实例,则会滤除 FileFilter 实例中未指定的扩展名和文件类型,即用户无法选择这些类型。如果未向方法传递任何 FileFilter 对象,则对话框中将显示所有文件。

可以采用以下两种方式之一使用 FileFilter 实例:

仅包含 文件扩展名的描述 包含 文件扩展名和 Macintosh 文件类型的描述

这两种格式不能在一个 browse 方法调用中互换。必须使用其中一种格式。

可以向 browse 方法传递一个或多个 FileFilter 实例,如下所示:

var imagesFilter:FileFilter = new FileFilter("Images", "*.jpg;*.gif;*.png"); var docFilter:FileFilter = new FileFilter("Documents", "*.pdf;*.doc;*.txt"); var myFileReference:FileReference = new FileReference(); myFileReference.browse([imagesFilter, docFilter]);

或者在 AIR 应用程序中:

var imagesFilter:FileFilter = new FileFilter("Images", "*.jpg;*.gif;*.png"); var docFilter:FileFilter = new FileFilter("Documents", "*.pdf;*.doc;*.txt"); var myFile:File = new File(); myFile.browseForOpen("Open", [imagesFilter, docFilter]);
var imagesFilter = new air.FileFilter("Images", "*.jpg;*.gif;*.png"); var docFilter = new air.FileFilter("Documents", "*.pdf;*.doc;*.txt"); var myFile = new air.File(); myFile.browseForOpen("Open", [imagesFilter, docFilter]);

FileFilter.extension 属性中的扩展名列表用于筛选文件浏览对话框中显示的文件。该列表实际并不显示在对话框中;若要对用户显示文件类型,必须在描述字符串以及扩展名列表中列出文件类型

热点排行