2011년 3월 10일 목요일

서버에 File Upload 하기 [출처] 서버에 File Upload 하기|작성자 위니

package {
       import flash.display.Sprite;
       import flash.events.Event;
       import flash.events.MouseEvent;
       import flash.net.FileFilter;
       import flash.net.FileReference;
       import flash.net.URLRequest;
       import flash.net.URLRequestMethod;
       import flash.net.URLVariables;

       public class FileUpload extends Sprite {

             /**
                *셋팅 되어 있는 서버 경로...
                * !! 주의 !! 서버 폴더의 퍼미션 설정을 반드시  !. write  체크 되어 있어야 합니다.
                방법 : ftp -> remote site -> 원하는 폴더 선택 우클릭 -> 퍼미션 설정 모드. 
                */
             public static const SERVER_PATH:String="";

             /**
                파일 레퍼런스 변수.
                * myType -> brows 에서는 타입을 배열로 받기 때문에 img, text  따로 생성하여 myType담아야 한다.
                */
             private var fileRef:FileReference;

             private var myType:Array=[];


             /**
                초기화 부분.
                */

             public function FileUpload() {
                    super();


                    // 초기화
                    this.defaultSetting();
                    this.initLayout();
                    this.initEvents();

                    // 업로드 시작을 기다리는 리스너
                    stage.addEventListener(MouseEvent.CLICK,onClick);
             }


             private function defaultSetting():void {

                    if (SERVER_PATH=="") {

                           trace("SERVER_PATH  설정해주세요");

                    }
                    this.fileRef=new FileReference  ;

                    // 업로드 타입
                    var imgType:FileFilter=new FileFilter("Images (*.jpg, *.jpeg, *.gif)","*.jpg; *.jpeg; *.gif");
                    var txtType:FileFilter=new FileFilter("Texts (*.txt, *.hwp)","*.txt; *.hwp");

                    this.myType.push(imgType);
                    this.myType.push(txtType);
             }

             private function initLayout():void {

             }

             private function initEvents():void {
                    this.fileRef.addEventListener(Event.SELECT,onSelect);
                    this.fileRef.addEventListener(Event.COMPLETE,onComplete);
             }

             /**
                *
                * @ 파일을 선택 했을 경우 처리 메소드.
                *   변수를 추가하여 전송할 수도 있고컨텐츠 타입전송방법( GET, POST ) 등을 설정한다.
                *   다수의 파일을 한번에 처리하고자  경우 FileReference -> FileReferenceList  한다.
                *
                *   파일이 없는 경우 FileReference 말고 URLLoader  처리하도록 변경해야 .
                *
                */
             private function onSelect(e:Event):void {

                    // 변수 추가하는 방법 ----------------------------------------------
                    var param:URLVariables=new URLVariables  ;
                    param.date=new Date  ;
                    param.id="1234-5678-90";

                    // URLRequest 설정 -----------------------------------------------
                    var url:String=FileUpload.SERVER_PATH+"/test/fileRef.php";
                    var req:URLRequest=new URLRequest(url);
                    req.method=URLRequestMethod.POST;
                    req.contentType="multipart/form-data";
                    req.data=param;

                    try {
                           this.fileRef.upload(req);
                    catch (e:Error) {
                           trace("Unable to Upload this file");
                    }
             }

             // 업로드 완료 --------------------------------
             private function onComplete(e:Event):void {
                    var name:String=e.target as FileReference.name;
                    trace(name+" Upload Complete");
             }

             // 스테이지를 클릭 했을 경우 셀렉트 브라우저 오픈 ---------------
             private function onClick(e:MouseEvent):void {
                    try {
                           fileRef.browse(this.myType);
                    catch (e:Error) {
                           trace(e.getStackTrace());
                    }
             }
       }
}

댓글 없음:

댓글 쓰기