이제 소스를 보도록 합시다.

아....근데 다른 언어를 이용해서 업로더를 구현해보신 분 계신가요? 플렉스에서는 이상하게 제목을 한글로 입력해서 업로드를 해버리면 업로드가 안되더군요.
MD5함수를 수정하면 가능합니다. ^^
이 부분은 좀 더 삽질을 해봐야할 부분인 것 같군요.
우선 영어는 뭐 잘 되니까-_-;

[code]
<mx:Script>
  <![CDATA[
   import com.adobe.webapis.flickr.methodgroups.Upload;
   import mx.controls.Alert;
   import flash.net.navigateToURL;
   import com.adobe.webapis.flickr.AuthPerm;
   import com.adobe.webapis.flickr.events.FlickrResultEvent;
   import com.adobe.webapis.flickr.methodgroups.Auth;
   import com.adobe.webapis.flickr.FlickrService;
 
   public var apikey:String = "해당API키";
   public var secretkey:String = "해당비밀키";
   public var flickrService:FlickrService;
   public var frobResult:FlickrResultEvent;
   public var frob:String = new String();
   public var token:String = new String();
   public var fileRef:FileReference;
   
   public function Authentication():void {
    flickrService = new FlickrService(apikey);
    flickrService.secret = secretkey;
    flickrService.addEventListener(
        FlickrResultEvent.AUTH_GET_FROB, getFrobResponse);
    flickrService.auth.getFrob();
   }
   
   public function getFrobResponse(event:FlickrResultEvent):void {
    if (event.success) {
     frob = String(event.data.frob);
     var auth_url:String = flickrService.getLoginURL(frob, AuthPerm.WRITE);
     navigateToURL(new URLRequest(auth_url), "_blank");
     Alert.show( "인증하기위한 브라우저가 뜰꺼에요."
        + "로그인한다음에 OK버튼을 누르세요^^",
        "인증",
        Alert.OK | Alert.CANCEL,
        null,
        onCloseAuthWindow );
    }
   }
   
   private function onCloseAuthWindow( event:* ):void {
    if ( event.detail == Alert.OK ) {
     flickrService.addEventListener(
        FlickrResultEvent.AUTH_GET_TOKEN, getTokenResponse );
     flickrService.auth.getToken( frob );
    }
   }

   private function getTokenResponse( event:FlickrResultEvent ):void {
    if ( event.success ) {
     token = event.data.auth.token;
     flickrService.token = token;
    } else {
     Alert.show("인증에 실패했습니다.");
    }
   }
   
   public function findFile():void {
    if (token == "") {
     Alert.show("인증부터 하세요!");
     return;
    }
    fileRef = new FileReference();
   
    try {
        fileRef.addEventListener(Event.SELECT, selectHandler);
        fileRef.addEventListener(Event.COMPLETE, completeHandler);
        fileRef.addEventListener(
           DataEvent.UPLOAD_COMPLETE_DATA, onUploadCompleteData);
        var success:Boolean = fileRef.browse();
       } catch (error:Error) {
           trace("Unable to browse for files.");
       }
   }
   
   public function selectHandler(event:Event):void {
    var uploader:Upload = new Upload(flickrService);
    uploader.upload(fileRef);
   }
   
   public function checkTokenResponse(event:FlickrResultEvent):void {
    Alert.show(event.data.auth.token);
   }
   
   public function completeHandler(event:Event):void {
    trace("업로드 완료");
   }
   
   public function  onUploadCompleteData(event:DataEvent):void {
    Alert.show(event.data);
   }
  ]]>
 </mx:Script>
 
 <mx:Button label="인증" click="Authentication();"/>
 <mx:Button label="파일업로드" click="findFile();" />
[/code]

오.....간단합니다.
아... apikey secretkey 에는 각각 발급받은 키를 넣어주세요 ^^
인증이라는 버튼이 있는데 누르게 되면 Authentication이라는 메소드를 호출합니다.
FlickrService라는 클래스가 있는데 apikey를 인자로 받아서 생성합니다.
그러면 이놈으로 인증이 필요없는 API를 다 호출할 수 있습니다 ^^
flickrService.auth.getFrob(); 이런식으로 Frob을 얻어오고!
navigateToURL로 브라우저를 띄워서 인증url로 이동을 시킨 후 로그인을 하게 되면
flickrService.auth.getToken( frob ); 으로 인해 토큰을 가져오게 됩니다.
토큰만 가져오면 다 끝납니다-_-; 이걸로 권한에 관한 건 다할 수 있어요 ^^

이거뭐 플렉스로 해도 될 것 같아요. 안해봤는데 될 것 같아요-_-;

파일업로드 버튼을 클릭하면 파일선택창이 뜨는데 이미지사진 아무거나 선택해서 업로드하면 돼요 ^^
(참고로 이미지파일도 한글이면 안돼요. 영어로 바꿔서 선택하세요 ^^)
FileReference 요놈도 설명해야하는 나중에-_-;
되는 거 증명동영샷~-_-; (실은....좀 심심해서-_-)


 
Posted by 머드초보

댓글을 달아 주세요