밤하늘의 실제별, 나도 가질 수 있다?!

 
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();= o ns = "urn:schemas-microsoft-com:office:office" />

.

.

 

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)

  • 포스팅이 유익하셨다면 지돌스타 블로그를 구독하세요 ->  
  • Adobe RIA기술과 천문학 분야에 관심있으신 분은 지돌스타 블로그를 E-mail 로 구독할 수 있습니다.
profile image

知之者不如好之者 好之者不如樂之者(아는 자는 좋아하는 자만 못하고 좋아하는 자는 즐기는 자만 못하다. 공자)

  1. 헐구리 2008/05/03 01:28 답글수정삭제

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

  2. ahnsw 2008/05/04 11:35 답글수정삭제

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

  3. 김기정 2008/05/06 21:27 답글수정삭제

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

트랙백 주소 :: http://blog.jidolstar.com/324/trackback/
옵션
댓글 달기