FLEX FTP上传

来源:互联网 发布:thinkphp3.2博客源码 编辑:程序博客网 时间:2024/05/24 05:37
1、Flex端        A、使用到的类介绍:            FileReference 类提供了在用户计算机和服务器之间上载和下载文件的方法。 操作系统对话框会提示用户选择要上载的文件或用于下载的位置。它主要能实现一个文件的上传。            FileReferenceList 类提供了让用户选择一个或多个要上载的文件的方法。 FileReferenceList 对象将用户磁盘上的一组本地文件(一个或多个文件)表示为 FileReference 对象的数组。        B、使用 FileReferenceList 类 实现多文件上传:            1) 将该类实例化:var myFileRef = new FileReferenceList();             2) 调用 FileReferenceList.browse() 方法,该方法将打开一个对话框,让用户选择一个或多个要上载的文件:myFileRef.browse();             3) 在成功调用 browse() 方法之后,使用 FileReference 对象数组来填充 FileReferenceList 对象的 fileList 属性。                 对 fileList 数组中的每个元素调用 FileReference.upload()        代码如下:    /** *//**     * 执行上传操作     * */        private function upLoadFiles():void    {        try        {            selectFileList.browse(new Array(imageFilter, textFilter));            selectFileList.addEventListener(Event.SELECT, selectHandler1);        }        catch (error:Error)         {            Alert.show("文件选择出现错误,请选择正确的文件");        }    }    /** *//**     * 如果文件被选中,则执行该方法     * */    function selectHandler1(event:Event):void    {        var reqst:URLReqst = new URLReqst("FileUploadServlet");        var upLoadFile:FileReference;         var upLoadFileList:FileReferenceList = FileReferenceList(event.target);        var selectedFileArray:Array = upLoadFileList.fileList;        login =(testPress)(PopUpManager.createPopUp( this, testPress , tr));        for (var i:uint = 0; i < selectedFileArray.length; i++)        {             upLoadFile = FileReference(selectedFileArray[i]);            upLoadFile.addEventListener(Event.COMPLETE, UpLoadcompleteHandler);            upLoadFile.addEventListener(ProgressEvent.PROGRESS, progressHandler);             try            {                upLoadFile.upload(reqst);            }            catch (error:Error)            {                Alert.show(error.message.toString());            }        }    }    function UpLoadcompleteHandler(event:Event):void    {         var upLoadFiles:FileReference = FileReference(event.target);         var fileNames = upLoadFiles.name;         //Alert.show('文件'+fileNames+'上传成功')         login.myLabels.text = '文件'+fileNames+'上传成功';    }     private function progressHandler(e:ProgressEvent):void  {     var proc: uint = e.bytesLoaded / e.bytesTotal * 100;      login.bar.setProgress(proc, 100);      login.bar.label= "当前进度: " + " " + proc + "%";   } testPress.mxml<?xml version="1.0" encoding="utf-8"?><mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="528" height="236"><mx:Script>    <![CDATA[        import mx.managers.PopUpManager;        p lic function clickMe():void {            PopUpManager.removePopUp(this);        }    ]]></mx:Script>    <mx:ProgressBar id="bar" labelPlacement="bottom" themeColor="#F20D7A"  minimum="0" visible="tr" maximum="100" label="当前进度: 0%"  direction="right" mode="man l" width="200" x="154" y="84"/>      <mx:Button x="221" y="135" label="关闭" click = "clickMe();"/>    <mx:Label x="173" y="27" id="myLabels" width="157"/></mx:TitleWindow>    2、JAVA端     接受Flex端的请求,在JAVA端利用apache的fileupload类库实现上传功能。代码如下:import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.util.Iterator;import java.util.List;import java.util.Properties;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletReqst;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;p lic class FileUploadServlet extends HttpServlet{    // private String uploadPath = "D:\\upload\\";    private String path = "file_path.properties";    private String skStr = "";    private String uploadPath = "";    private int maxPostSize = 1000 * 1024 * 1024;    p lic void doPost(HttpServletReqst req, HttpServletResponse res) throws ServletException,            IOException    {        String filePathaa = this.getServletConfig().getServletContext().getRealPath("/");        Properties p = loadProperties(path);        uploadPath = p.getProperty("filepath");        res.setContentType("text/html;charset=UTF-8");        req.setCharacterEncoding("UTF-8");        DiskFileItemFactory factory = new DiskFileItemFactory();        factory.setSizeThreshold(1024*20);        ServletFileUpload upload = new ServletFileUpload(factory);        upload.setSizeMax(maxPostSize);        try        {            List fileItems = upload.parseReqst(req);            Iterator iter = fileItems.iterator();            while (iter.hasNext())            {                FileItem item = (FileItem) iter.next();                if (!item.isFormField())                {                    String name = item.getName();                    try                    {                        File skFile = new File(uploadPath + name);                        if (skFile.exists())                        {                            skFile.delete();                            item.write(new File(uploadPath + name));                        }                        else                        {                            item.write(new File(uploadPath + name));                        }                    } catch (Exception e)                    {                        e.printStackTrace();                    }                }            }        } catch (FileUploadException e)        {            e.printStackTrace();        }    }    p lic Properties loadProperties(String path) throws IOException    {        InputStream in = this.getClass().getResourceAsStream(path);        //        Properties p = new Properties();        p.load(in);        in.close();        return p;    }}还要修正web.xml,添加如下内容<!-- For file uploaded -->   <servlet>        <servlet-name>FileUploadServlet</servlet-name>        <servlet-class>FileUploadServlet</servlet-class>    </servlet>    <servlet-mapping>        <servlet-name>FileUploadServlet</servlet-name>        <url-pattern>/FileUploadServlet</url-pattern>    </servlet-mapping> 
<?xml version="1.0" encoding="utf-8"?><mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()" layout="absolute" width="497" height="136" backgroundGradientAlphas="[1.0, 1.0]" backgroundGradientColors="[#F2F8F8, #45E7E5]">    <mx:Script source="upload.as"></mx:Script>    <mx:Style>        .myfont{font-size:13pt}    </mx:Style>    <mx:Button x="10" y="95" label="上传文件" click="pickfile()" styleName="myfont"/>    <mx:Label x="10" y="10" text="文件上传" styleName="myfont"/>    <mx:ProgressBar x="10" y="40" width="457" themeColor="#F20D7A" minimum="0" mode="manual" maximum="100" id="progress1" label="当前进度: 0%" styleName="myfont" fontWeight="normal"/>    <mx:Label x="146" y="98" width="321" id="lbProgress" styleName="myfont" textAlign="right"/></mx:Application>
// ActionScript file 2 import flash.events.Event; 3 import flash.net.FileFilter; 4 import flash.net.FileReference; 5 private var fileRef:FileReference = new FileReference(); 6 private function init():void{ 7      8 } 9 10 private function pickfile():void{11     var imageTypes:FileFilter = new FileFilter("图片 (*.jpg, *.jpeg, *.gif,*.png)""*.jpg; *.jpeg; *.gif; *.png");12     var textTypes:FileFilter = new FileFilter("文本文件(*.txt","*.txt;");13     var officeType:FileFilter = new FileFilter("Office文件(*.doc, *.xls","*.doc; *.xls");14     var anyType:FileFilter = new FileFilter("所有文件(*.*)","*.*");15     var allTypes:Array = new Array(imageTypes, textTypes,officeType,anyType);16     fileRef.addEventListener(Event.SELECT, selectHandler);17     fileRef.addEventListener(Event.COMPLETE, completeHandler);18     fileRef.addEventListener(ProgressEvent.PROGRESS, progressHandler);19     fileRef.addEventListener("ioError", ioerrorHandler);20     try{21         var success:Boolean = fileRef.browse(allTypes);22     }catch (error:Error){23         trace("Unable to browse for files."+error.toString());24     }25 }26 private function ioerrorHandler(event:Event):void{27     trace("Unable to upload file."+event.toString());28 }29 private function progressHandler(event:ProgressEvent):void{30     lbProgress.text = " 已上传 " + (event.bytesLoaded/1024).toFixed(2)+ " K,共 " + (event.bytesTotal/1024).toFixed(2+ " K";31     var proc: uint = event.bytesLoaded / event.bytesTotal * 100;32     progress1.setProgress(proc, 100);33     progress1.label= "当前进度: " + " " + proc + "%";34 35 }36 private    function selectHandler(event:Event):void{37     var request:URLRequest = new URLRequest("http://localhost:9080/upload/upload.jsp")38     try39     {40         fileRef.upload(request);41     }42     catch (error:Error)43     {44         trace("Unable to upload file."+error.toString());45     }46 }47 private function completeHandler(event:Event):void{48     trace("uploaded");49 }