使用Flex和java servlet上传文件

资源都是来自网上。本实例将展示使用Flex和java servlet上传文件。

 事前准备就是到http://commons.apache.org 下载common-fileupload-1.1.1.jar以及common-io-1.2.jar两个包。
前台Flex代码:
 
Xml代码 复制代码 收藏代码

<?xml version="1.0" encoding="utf-8"?>  

 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns="*" creationComplete="init();">   

 <mx:Script>   

 <![CDATA[   

import flash.net.FileReference;  

import mx.controls.Alert;  

import mx.events.CloseEvent;  

import flash.events.*;  

  

private var file: FileReference;  

  

private function init(): void{  

Security.allowDomain("*");  

file = new FileReference();  

file.addEventListener(ProgressEvent.PROGRESS, onProgress);  

file.addEventListener(Event.SELECT, onSelect);  

file.addEventListener(Event.COMPLETE, completeHandle);  

}  

  

private function completeHandle(event:Event):void{  

    Alert.show("恭喜你,上传成功");  

}  

  

private function upload(): void{  

var imageTypes:FileFilter = new FileFilter("Images (*.jpg, *.jpeg, *.png)", "*.jpg;*.jpeg;*.png");  

var allTypes:Array = new Array(imageTypes);  

file.browse(allTypes);  

file.browse();  

}  

private function onSelect(e: Event): void{  

Alert.show("上传 " + file.name + " (共 "+Math.round(file.size)+" 字节)?",  

"确认上传",  

Alert.YES|Alert.NO,  

null,  

proceedWithUpload);  

}  

  

private function onProgress(e: ProgressEvent): void{  

lbProgress.text = " 已上传 " + e.bytesLoaded  

+ " 字节,共 " + e.bytesTotal + " 字节";  

var proc: uint = e.bytesLoaded / e.bytesTotal * 100;  

bar.setProgress(proc, 100);  

bar.label= "当前进度: " + " " + proc + "%";  

}  

  

private function proceedWithUpload(e: CloseEvent): void{  

if (e.detail == Alert.YES){  

var request: URLRequest = new URLRequest("http://localhost:8080/FileUploaded/FileUploaded");  

try {  

file.upload(request);  

} catch (error:Error) {  

trace("上传失败");  

}  

  

}  

}  

]]>  

 </mx:Script>   

  

<mx:Canvas width="100%" height="100%" x="10" y="170" fontSize="15">  

<mx:VBox width="100%" horizontalAlign="center">  

<mx:Label id="lbProgress" text="上传"/>  

<mx:ProgressBar id="bar" labelPlacement="bottom" themeColor="#F20D7A"  

minimum="0" visible="true" maximum="100" label="当前进度: 0%"  

direction="right" mode="manual" width="200"/>  

  

<mx:Button label="上传文件" click="upload();"/>  

</mx:VBox>  

</mx:Canvas>  

</mx:Application>  

 

 

http://localhost:8080/FileUploaded/FileUploaded 就是你自己写的servlet的路径了。

接下来写的是Java Servlet:

package upload;   

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;   

  

/**   

 *   

 * @author crystal   

 */   

public class FileUploaded extends HttpServlet {   

  

    /**   

     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.   

     * @param request servlet request   

     * @param response servlet response   

     */   

    // 定义文件的上传路径   

  

    private String uploadPath = "d:\\a\\";   

  

// 限制文件的上传大小   

  

    private int maxPostSize = 100 * 1024 * 1024;   

  

    public FileUploaded() {   

        super();   

    }   

  

    public void destroy() {   

        super.destroy();   

    }   

  

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)   

            throws ServletException, IOException {   

        System.out.println("Access !");   

        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() + "结束");   

        }   

    }   

  

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">  

  

    /**   

     * Handles the HTTP <code>GET</code> method.   

     * @param request servlet request   

     * @param response servlet response   

     */   

    protected void doGet(HttpServletRequest request, HttpServletResponse response)   

            throws ServletException, IOException {   

        processRequest(request, response);   

    }   

  

    /**   

     * Handles the HTTP <code>POST</code> method.   

     * @param request servlet request   

     * @param response servlet response   

     */   

    protected void doPost(HttpServletRequest request, HttpServletResponse response)   

            throws ServletException, IOException {   

        processRequest(request, response);   

    }   

  

    /**   

     * Returns a short description of the servlet.   

     */   

    public String getServletInfo() {   

        return "Short description";   

    }   

    // </editor-fold>  

  

}  

如果使得你的Servlet被访问,你还需要在WEB-INF/web.xml 添加如下的xml语句:[在<web-app>中]

<!-- For file uploaded -->  

   <servlet>  

        <servlet-name>FileUploaded</servlet-name>  

        <servlet-class>upload.FileUploaded</servlet-class>  

    </servlet>  

  

    <servlet-mapping>  

        <servlet-name>FileUploaded</servlet-name>  

        <url-pattern>/FileUploaded</url-pattern>  

    </servlet-mapping> 

效果图:

posted on 2011-06-27 12:38  破阵子 . 如是我闻  阅读(469)  评论(0编辑  收藏  举报

导航