이제 소스를 보도록 합시다.
아....근데 다른 언어를 이용해서 업로더를 구현해보신 분 계신가요? 플렉스에서는 이상하게 제목을 한글로 입력해서 업로드를 해버리면 업로드가 안되더군요.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 요놈도 설명해야하는 나중에-_-;
되는 거 증명동영샷~-_-; (실은....좀 심심해서-_-)