태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.
밤하늘의 실제별, 나도 가질 수 있다?!

[Flex,AIR 팁] FileReference와 UploadCompleteData 이벤트

2008/05/03 00:14

 

[공지]이미지나 링크가 깨졌다면 댓글 부탁드립니다.

Flex(AIR, Flash 포함)로 내 컴퓨터에 있는 파일을 서버에 전송하기 위해 FileReference나 FileReferenceList를 사용한다.
browse()함수를 이용해 파일을 선택하고
선택한 파일을 전송하기 위해 upload() 함수를 이용해 전송하면 끝이다.

그런데 문제는 전송하고 나서 서버측에서 어떤 데이타를 보내줄 때 받을 수 없다는 것이였다.

PHP를 예로 들자면
<?
 여기에 이미지 저장 코드가 들어감  

 echo "저장완료했어요";
?>


Flex에서 이 PHP에 FileReference를 이용해 저장한다음 echo문으로 "저장완료했어요"를 받고 싶다.
하지만 Flash Player 9.0.28.0 이전에는 받을 수 없었다.

이거 생각보다 골치 아픈 문제이다.

난, 이 때문에 무지 삽질했다.
방법이 없는 줄 알았다.
http://kimkijeung.com/54  에서도 FileReference는 반쪽짜리 업로드 클래스라고 설명하고 있다.

하지만 지금은 다르다.
Flash Player 9.0.28.0 부터는 새롭게 추가된 flash.events.DataEvent.UPLOAD_COMPLETE_DATA 이벤트를 이용하면 쉽게 서버에서 전송한 데이타를 읽어올 수 있다.


가령, 이런식으로 하면 된다.

var fr:FileReference =  new FileReference();

.

.

 

fr.addEventListener( flash.events.DataEvent.UPLOAD_COMPLETE_DATA, uploadCompleteDataHandler );

.

.

.

function uploadCompleteDataHandler(event:DataEvent):void

{

    trace(event.data); //저장완료했어요

}

이 이벤트는 flash.events.Event.COMPLETE 이후에 호출된다.
Complete는 FileReference의 인스턴스를 참조하기 위해 사용하며 서버측에서 전송해주는 데이타는 받을 수 없다. 그러므로 서버측에서 받아야할 데이타가 있을때 Complete 대신 UploadCompleteData 이벤트를 사용하면 되겠다.

이미 알고 있는 분도 있겠지만.... 삽질 방지용 Tip 이다.

참고내용
http://livedocs.adobe.com/flash/9.0_kr/ActionScriptLangRefV3/flash/net/FileReference.html#event:uploadCompleteData

글쓴이 : 지돌스타(http://blog.jidolstar.com/324)
크리에이티브 커먼즈 라이선스
Creative Commons License

Adobe Flash Platform , , , , , , , ,

Trackback 주소: http://blog.jidolstar.com/trackback/324
  1. Blog Icon
    헐구리

    팁 감사합니다^^ 그런데 Flash Player 9.0.28.0 이전 버젼을 쓰는 분들에게는 좀 문제의 소지가 있을수 있겠네요.

  2. 자동으로 업그레이드 해주면 문제가 없을 것 같아요. ^^

  3. 유용한 팁 감사합니다. 근데 본문에 제글이 원본인것 처럼 설명하셔서 깜짝놀랐습니다. 그 글은 제가 작성한게 아닙니다. 원본은 김기정님이 쓰신http://kimkijeung.com/54 에서 확인 하실 수 있습니다.

  4. 아~ 그랬군요.
    ㅋㅋㅋ
    글을 수정했습니다.

  5. 좋은 정보 감사합니다.^^

  6. 좋은 팁이네요 ;)

  7. Blog Icon
    kbs

    DataEvent.UPLOAD_COMPLETE_DATA로 서버측 메세지를 읽어들일 때 xml로는 받아지지 않나요?
    var result:XML = event.data as XML
    또는 var result:XMLList = event.data as XMLList (XMLDocument로도 해봤음)
    등 XML로 캐스팅을 해도 전혀 xml타입으로는 읽어오지 않네요.... 문자열로 읽어서 substring하는 수밖에 없나요??;;;;

  8. var result:XML = new XML( event.data as String );
    을 해보세요.