`

Flex使用FTP上传文件

阅读更多
<?xml version="1.0" encoding="utf-8"?>
<mx:Application
    xmlns:mx="http://www.adobe.com/2006/mxml"
    xmlns:net="flash.net.*"   
    layout="vertical" fontSize="12" viewSourceURL="srcview/index.html">
    <mx:Script>

        import mx.utils.*;
        import mx.controls.Alert;
        import flash.net.FileReference;
        import flash.net.*;
        import flash.utils.*;

        //檔案大小與檔案傳輸類型
        private var fileSize:uint;
        private var fileContents:ByteArray;

        //連線用Socket
        private var ftpSocket:Socket;
        private var ftpResponce:String;

        //上傳檔案用Socket
        private var upLoadSocket:Socket;
        private var upLoadResponce:String;

        //取得使用者的IP與Port
        private var ClientIP:String;       
        private var ClientPort:int;

        //連線到FTP資訊
        private var server:String="";//FTP 主機位置ex.ftp.abc.com
        private var user:String="";//FTP 帳號
        private var pass:String="";//FTP 密碼
        private var dir:String="";//FTP 上傳資料夾   

        //Ftp連線   
        private function connect():void{
            this.connbtn.enabled=false;

            ftpSocket = new Socket(server,21);       
            sendCommand("USER "+this.user);
            sendCommand("ASS "+this.pass);           
            sendCommand("CWD "+dir);

            ftpSocket.addEventListener(ProgressEvent.SOCKET_DATA, SocketData);
            ftpSocket.addEventListener(IOErrorEvent.IO_ERROR, IOError);
            ftpSocket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, SecError);

            ftpSocket.addEventListener(Event.CONNECT, SocketConn);
            ftpSocket.addEventListener(Event.CLOSE, SocketClose);
            ftpSocket.addEventListener(Event.ACTIVATE, SocketAtivate);           
        }

        private function SocketData(erogressEvent):void{
            ftpResponce = ftpSocket.readUTFBytes(ftpSocket.bytesAvailable)
            var serverResponse:Number = Number(ftpResponce.substr(0, 3));

            if(ftpResponce.indexOf(&apos;227&apos;)>-1){
                //取得使用者的ip位置
                var temp:Object = ftpResponce.substring(ftpResponce.indexOf("(")+1 ,ftpResponce.indexOf(")"));
                var upLoadSocket_temp:Object = temp.split(",");
                ClientIP = upLoadSocket_temp.slice(0,4).join(".");
                ClientPort = parseInt(upLoadSocket_temp[4])*256+
                int(upLoadSocket_temp[5]);

                //建立一個上傳的PORT
                upLoadSocket = new Socket(ClientIP,ClientPort);
                upLoadSocket.addEventListener(ProgressEvent.SOCKET_DATA, receiveData);
            }

            switch(String(serverResponse)){
                case "220": //FTP連線就續
                    break;                   

                case "331"://帳號ok,密碼錯誤
                    break;

                case "230"://登入成功
                        //指定下載文件的類型,I是二進位文件,A是字元文件           
                        sendCommand("TYPE A");//設定TYPE為ASCII
                        sendCommand("TYPE I");//設定上傳的編碼為8-bit binary                   
                        sendCommand("ASV");//passive模式
                    break;

                case "250" ://資料夾切換成功
                    break;

                case "227" : //Entering Passive Mode (h1,h2,h3,h4,p1,p2).
                    break;
                default:
             }
            traceData(ftpResponce);
        }        

        private function IOError(e:IOErrorEvent):void{
           traceData("—>Error:"+e.text);
        }

        private function SecError(e:SecurityErrorEvent):void{
           traceData("–>SecurityError:"+e.text);
        }

        private function SocketConn(evt:Event):void {
            traceData("–>OnSocketConnect:"+evt.target.toString());
        }

        private function SocketAtivate(evt:Event):void {
            traceData("–>onSocketAtivate");
            sendCommand("WD");
            ftpSocket.flush();       
        }

        private function SocketClose(evt:Event):void {           
            traceData("–>onSocketClose");
            sendCommand("REST 0");
            sendCommand("WD");
            ftpSocket.flush();                       
        }

        //ProgressEvent.SOCKET_DATA
        private function receiveData(erogressEvent):void{
            upLoadResponce = upLoadSocket.readUTFBytes(upLoadSocket.bytesAvailable);
            traceData("upLoadSocket_response—>"+upLoadResponce);
        }

        //瀏覽檔案           
        private function selectEvent(event:Event):void{
            upLoadbtn.enabled = true;
            this.filename.text = fileRef.name;
            fileRef.load();
        }

        //檔案上傳
        private function uploadFile():void {
            createRemoteFile(fileRef.name);//下上傳指令
            sendData();//送出檔案
        }


        private function createRemoteFile(fileName:String):void{
            if(fileName!=null && fileName !=""){               
                sendCommand("STOR "+fileName);//上傳指令
                ftpSocket.flush();
            }
        }

        //檔案轉二進位傳送
        private function sendData():void{
            fileContents=fileRef.data as ByteArray;
            fileSize=fileRef.size;
            upLoadSocket.writeBytes(fileContents,0,fileSize);
            upLoadSocket.flush();
        }

        //處理Ftp指令
        private function sendCommand(arg:String):void {
            arg +="\n";
            ftpSocket.writeUTFBytes(arg);
            ftpSocket.flush();
        }

        //顯示資訊
        private function traceData(event:Object):void {
            var tmp:String = "================================\n";
            infotxt.text +=event.toString()+ "\n" ;
            infotxt.verticalScrollPosition += 20;           
        }

    </mx:Script>
    <net:FileReference id="fileRef"    select="selectEvent(event)"/>   

    <mxanel id="up" horizontalAlign="left" width="100%" height="100%">
        <mx:Box width="100%" height="100%">
            <mx:VBox>           
                <mx:Form>
                    <mx:FormItem label="Selected File:">
                        <mxabel id="filename"/>
                    </mx:FormItem>

                    <mx:FormItem >
                        <mx:Button width="80" label="連線" id="connbtn" click="connect();" />
                        <mx:Button width="80" label="瀏覽" click="fileRef.browse()" />
                        <mx:Button width="80" label="上傳" id="upLoadbtn" enabled="false"
                            click="uploadFile()" />
                    </mx:FormItem>

                    <mx:HRule width="100%" tabEnabled="false"/>
                    <mx:FormItem label="Events:">
                        <mx:TextArea id="infotxt" width="331" height="124" />                       
                    </mx:FormItem>
                </mx:Form>
            </mx:VBox>
        </mx:Box>
    </mxanel>
</mx:Application>
分享到:
评论

相关推荐

    flex web ftp上传. 点对点方式 . 支持多文件上传 现打包发布

    标题中的“flex web ftp上传”指的是使用Adobe Flex技术构建的Web应用程序,该程序允许用户通过FTP(文件传输协议)进行文件上传。Flex是一种基于ActionScript的开放源代码框架,用于创建交互式的、运行在浏览器上的...

    Flex实现Ftp上传

    在本话题中,我们将详细探讨如何使用Flex来实现FTP文件上传功能,这是一个在Web应用中常见的需求,特别是对于那些需要用户上传文件至服务器的应用。 FTP(File Transfer Protocol)是一种用于在网络上进行文件传输...

    Flex上传文件与下载

    - **Button**:两个按钮,分别用于打开文件选择对话框(选择文件)和上传文件。 - **List**:用于显示已选中的文件列表。 - **Button**:用于触发文件下载操作。 - **ProgressBar**:用于显示文件上传进度。 #### ...

    flex的ftp操作

    1. **FTP协议理解**:首先需要了解FTP的基本原理和工作模式,包括主动模式和被动模式,以及FTP命令如`LIST`(列出目录)、`PUT`(上传文件)、`GET`(下载文件)等。 2. **Flex AS3 API**:在Flex中,FTP操作主要...

    flex多文件上传控件(flex源码)

    在这个"flex多文件上传控件"中,我们可以看到它是Flex技术在文件上传场景中的应用,特别适合于需要批量或单个上传文件到服务器的Web应用。 该控件是通过Adobe Flash Builder 4进行开发的,Flash Builder是一个集成...

    Flex图片上传实例

    而commons-fileupload-1.2.1.jar是Apache Commons FileUpload库的一个版本,它提供了处理HTTP多部分表单数据的能力,这是上传文件时常见的格式。 在后台,Java被用作服务器端的语言来接收、处理和存储上传的图片。...

    tt.rar_FLEX FTP_flex

    本文将深入探讨与“tt.rar_FLEX FTP_flex”相关的知识点,包括Flex的应用、FTP协议以及如何在Flex中实现文件上传和显示。 首先,Flex是一个开源的开发框架,它允许开发者使用MXML和ActionScript来创建交互式的、...

    flex中的文件上传(简单例子)

    // 定义文件的上传路径 private String uploadPath = "G://upload/"; // 限制文件的上传大小 private int maxPostSize = 100 * 1024 * 1024; public FileUploadServlet() { super(); } public void ...

    Flex教程 ppt格式 简单实用

    数据管理.ppt第21章 XML的处理.ppt第22章 Flex应用程序开发.ppt第23章 Flex应用程序部署.ppt第24章 文件的上传下载.ppt第25章 Mp3播放器.ppt第26章 用户登录.ppt第27章 电子相册.ppt第28章 浏览FTP.ppt第29章 FLV...

    ASP.NET源码——[上传下载]Asp.net + Flex实现网络硬盘.zip

    在ASP.NET后端,通常会使用HttpPostedFileBase类接收上传文件,然后存储到服务器的指定位置或数据库中。 4. **文件下载机制**: 文件下载可能通过HTTP或FTP协议实现。ASP.NET提供了HttpResponse类的WriteFile方法...

    Flex学习大礼包(flex基础教程、flex和java整合)--下载不扣分,童叟无欺

    第24章 文件的上传下载.ppt 第25章 Mp3播放器.ppt 第26章 用户登录.ppt 第27章 电子相册.ppt 第28章 浏览FTP.ppt 第29章 FLV播放器.ppt 第30章 留言板.ppt 第31章 在线书店系统.ppt ├─Flex与JAVA │ ...

    Flex教程.rar

    第01章 Flex简介.ppt ...第24章 文件的上传下载.ppt 第25章 Mp3播放器.ppt 第26章 用户登录.ppt 第27章 电子相册.ppt 第28章 浏览FTP.ppt 第29章 FLV播放器.ppt 第30章 留言板.ppt 第31章 在线书店系统.ppt

    flexUPload.rar

    描述中的“可以使用的flex上传文件的”意味着这个压缩包包含了一个已经开发完成并且可以正常运行的Flex文件上传功能。这通常包括自定义的UI组件、处理文件选择、上传进度显示以及错误处理等功能。在Flex中,开发者...

    AIRFtp类库

    2. 文件上传:通过FTP类库,开发者可以将本地文件上传到FTP服务器。这通常涉及选择文件、指定目标路径以及处理上传进度和错误。 3. 文件下载:同样,类库会提供下载文件的功能,包括设定保存路径、开始下载、跟踪...

    FlexFTP实例源码

    在这个实例中,开发者通过Flex3构建了一个用户界面,允许用户连接到FTP服务器,进行上传、下载、列出目录、删除文件等操作。源码中可能包含了以下关键知识点: 1. **Flex组件库**:Flex提供了丰富的组件库,如...

    flex完全自学手册 电子教案(PPT)

    2008-07-10 10:54 169472 65848 第24章 文件的上传下载.ppt 2008-07-10 10:57 137728 86032 第25章 Mp3播放器.ppt 2008-07-10 11:00 116736 66591 第26章 用户登录.ppt 2008-07-10 11:02 285184 245454 第27章 电子...

    air 断续续传

    ActionScript是与Flex框架一起使用的脚本语言,用于构建富互联网应用程序(RIA)。 断点续传的核心在于记录文件传输的状态,即在文件传输过程中,如果因为网络问题或其他因素导致传输中断,系统能够记住当前的传输...

Global site tag (gtag.js) - Google Analytics