<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    JAVA & FLEX

    一個分享java和flex開發(fā)經(jīng)驗的空間

       :: 首頁 ::  :: 聯(lián)系 ::  :: 管理 ::
      26 隨筆 :: 2 文章 :: 44 評論 :: 0 Trackbacks

        和傳統(tǒng)的JSP一樣,在flex中,有的時候也需要實現(xiàn)文件上傳和下載的功能,但是在flex里文件的上傳和下載的實現(xiàn)相對來說比較復(fù)雜,如何實現(xiàn),請看下面。

        由于flex是一個比較新的技術(shù),在研究的時候,還是按著JSP的方式去嘗試,在開始之初,主要有以下幾種思路:

        A、利用ftp的方式進(jìn)行文件的上傳和下載,需要利用flex的socket接口。

        B、利用webService的方式來進(jìn)行文件的上傳和下載

        C、利用flex+sevlet+fileupload組件實現(xiàn)文件的上傳和下載

        在通過比較后,最后選擇了第三種,用Flex+sevlet的方式來完成文件上傳和下載的功能,理由如下(與上面的思路相對應(yīng)):

        A、涉及到了流的操作,實現(xiàn)起來比較復(fù)雜,出現(xiàn)錯誤的幾率比較高

        B、關(guān)于flex端的可參考的資料比較少,并且還需要啟動webservice服務(wù)

        C、這個技術(shù)比較成熟,從flex2.0開始,在flex端已經(jīng)可以引用FileReference類了,并且在java端有成熟的組件可以使用,所以最后考慮使用該種方法來處理。

    一、文件的上傳

        1、Flex端
            A、使用到的類介紹:
                FileReference 類提供了在用戶計算機(jī)和服務(wù)器之間上載和下載文件的方法。 操作系統(tǒng)對話框會提示用戶選擇要上載的文件或用于下載的位置。它主要能實現(xiàn)一個文件的上傳。
                FileReferenceList 類提供了讓用戶選擇一個或多個要上載的文件的方法。 FileReferenceList 對象將用戶磁盤上的一組本地文件(一個或多個文件)表示為 FileReference 對象的數(shù)組。
            B、使用 FileReferenceList 類 實現(xiàn)多文件上傳:
                1) 將該類實例化:var myFileRef = new FileReferenceList(); 
                2) 調(diào)用 FileReferenceList.browse() 方法,該方法將打開一個對話框,讓用戶選擇一個或多個要上載的文件:myFileRef.browse(); 
                3) 在成功調(diào)用 browse() 方法之后,使用 FileReference 對象數(shù)組來填充 FileReferenceList 對象的 fileList 屬性。 
                    對 fileList 數(shù)組中的每個元素調(diào)用 FileReference.upload()

            代碼如下:

        /**
         * 執(zhí)行上傳操作
         * 
    */
        
        
    private function upLoadFiles():void
        
    {
            
    try
            
    {
                selectFileList.browse(
    new Array(imageFilter, textFilter));
                selectFileList.addEventListener(Event.SELECT, selectHandler1);
            }

            
    catch (error:Error) 
            
    {
                Alert.show(
    "文件選擇出現(xiàn)錯誤,請選擇正確的文件");
            }

        }

        
    /**
         * 如果文件被選中,則執(zhí)行該方法
         * 
    */

        function selectHandler1(event:Event):
    void
        
    {
            var request:URLRequest 
    = new URLRequest("FileUploadServlet");
            var upLoadFile:FileReference; 
            var upLoadFileList:FileReferenceList 
    = FileReferenceList(event.target);
            var selectedFileArray:Array 
    = upLoadFileList.fileList;
            login 
    =(testPress)(PopUpManager.createPopUp( this, testPress , true));
            
    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(request);
                }

                
    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
    = "當(dāng)前進(jìn)度: " + " " + 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;
            public function clickMe():void {
                PopUpManager.removePopUp(this);
            }
        
    ]]>
    </mx:Script>
        
    <mx:ProgressBar id="bar" labelPlacement="bottom" themeColor="#F20D7A"  
    minimum
    ="0" visible="true" maximum="100" label="當(dāng)前進(jìn)度: 0%"  
    direction
    ="right" mode="manual" width="200" x="154" y="84"/>  
        
    <mx:Button x="221" y="135" label="關(guān)閉" click = "clickMe();"/>
        
    <mx:Label x="173" y="27" id="myLabels" width="157"/>

    </mx:TitleWindow>

        2、JAVA端

         接受Flex端的請求,在JAVA端利用apache的fileupload類庫實現(xiàn)上傳功能。代碼如下:

    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.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 = "D:\\upload\\";
        private String path = "file_path.properties";
        
    private String skStr = "";
        
    private String uploadPath = "";
        
    private int maxPostSize = 1000 * 1024 * 1024;

        
    public void doPost(HttpServletRequest 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.parseRequest(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();
            }


        }


        
    public 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,添加如下內(nèi)容

    <!-- 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>

    二、文件的下載
        

        調(diào)用的方法:private function downLoadFiles(urlAdd:String):void
        參數(shù)urlAdd就是用戶的ip地址,如果使用本地的localhost就會產(chǎn)生安全沙箱問題,因此讓用戶自己輸入自己的ip地址。這樣就避免了安全沙箱的問題。如果是本機(jī)啟動服務(wù),訪問地址,需要輸入IP,不能用localhost來代替本機(jī)的IP地址,否則,還是會出現(xiàn)安全沙箱問題。

         FileReference.download() 方法提示用戶提供文件的保存位置并開始從遠(yuǎn)程 URL 進(jìn)行下載。直接加載請求路徑下載,不需要后臺的支持。代碼如下:

    import com.systex.flex.util.testPress;

    import flash.net.FileReferenceList;

    import mx.controls.Alert;
    import mx.managers.PopUpManager;
        var imageFilter:FileFilter 
    = new FileFilter("Image Files (*.jpg, *.jpeg, *.gif, *.png)""*.jpg; *.jpeg; *.gif; *.png");
        var textFilter:FileFilter 
    = new FileFilter("Text Files (*.txt, *.rtf, *.zip)""*.txt; *.rtf; *.zip");
        var selectFileList:FileReferenceList 
    = new FileReferenceList();
        var selectedFileArray:Array 
    = new Array();
        var login:testPress 
    = new testPress();
        var downloadURL:URLRequest;
        var DownLoadfile:FileReference; 
    //這是要主要的地方
        
    //http://XX.XX.XX.XX:8080/upload/main.zip
        private function downLoadFiles(urlAdd:String):void
        
    {
            downloadURL 
    = new URLRequest(urlAdd);
            DownLoadfile 
    = new FileReference();
            configureListeners(DownLoadfile);
            DownLoadfile.download(downloadURL);
        }

         
    private function configureListeners(dispatcher:IEventDispatcher):void {
            dispatcher.addEventListener(Event.COMPLETE, completeHandler);

        }

        
        
    private function completeHandler(event:Event):void {
        mx.controls.Alert.show(
    "文件下載成功");
        }

    這里的是上面上傳代碼的上部分

    附上測試的MXML

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
        
    >
    <mx:Script source="UpDownLoadFiles.as"/>

        
    <mx:Canvas width="100%" height="100%" x="10" y="170" fontSize="15">
        
    <mx:VBox width="100%" horizontalAlign="center">
        
    <mx:TextInput id="mytextInput"/>
        
    <mx:Button label="文件下載" click="downLoadFiles('http://'+mytextInput.text+':8080/downLoading/2MSN.rar');"/>
        
    <mx:Button label="上傳文件" click="upLoadFiles();"/>
        
    </mx:VBox>
        
    </mx:Canvas>
    </mx:Application>

    fileupload下載地址就不提供了,請到網(wǎng)上搜尋一下






    posted on 2008-09-18 16:57 程序人生-天津 閱讀(15341) 評論(1)  編輯  收藏 所屬分類: Flex

    評論

    # re: 【心得】Flex中的文件上傳與下載 2009-12-15 19:35
    如果路徑包含中文會出現(xiàn)錯誤  回復(fù)  更多評論
      

    主站蜘蛛池模板: 免费观看无遮挡www的视频| 亚洲日韩在线中文字幕综合| 91精品国产亚洲爽啪在线影院| 高清在线亚洲精品国产二区| 国产成人免费福利网站| 国产又大又粗又硬又长免费 | 黄色免费网址在线观看| 亚洲a∨无码一区二区| 亚洲第一成年网站视频| 国产成人亚洲精品91专区高清| 特级aaaaaaaaa毛片免费视频| 黄色a三级三级三级免费看| eeuss免费天堂影院| 国产精品永久免费视频| 成人A毛片免费观看网站| 成在人线av无码免费高潮喷水| 日本在线免费观看| 永久在线免费观看| 性盈盈影院免费视频观看在线一区| 女人18毛片免费观看| 可以免费观看的一级毛片| 亚洲一区二区三区国产精品| 亚洲精品成人片在线观看精品字幕 | 无码精品一区二区三区免费视频| 香蕉成人免费看片视频app下载| 97在线视频免费播放| 久久久久久国产精品免费免费| 色视频色露露永久免费观看 | 在线看片免费人成视久网| 精品久久久久成人码免费动漫| 免费无码又爽又刺激毛片| 亚洲精品国产日韩无码AV永久免费网 | 妞干网手机免费视频| 亚洲中文字幕视频国产| 亚洲AV无码乱码国产麻豆穿越| 亚洲综合图片小说区热久久| 亚洲成在人线aⅴ免费毛片| 特级做a爰片毛片免费看| 精品国产一区二区三区免费| 四虎永久在线观看免费网站网址| 亚洲av中文无码|