'FileStream'에 해당되는 글 1건

  1. 2009/04/19 kineticroad URLStream 사용기

URLStream 사용기

Flex 2009/04/19 02:55
프로젝트를 진행하다가 몇가지 이슈사항이 발생했다.
AIR로 웹에 있는 파일에 접근해 FileReference 클래스 이용없이 맞바로 로컬에 파일을 생성해야하는 이슈였는데
이부분은 URLStream클래스로 간단하게 해결할 수 있었다.

private const HOST_NAME:String = "http://www.kineticroad.com/blog";

private var urlStream:URLStream;

private function urlStreamTest():void
{
urlStream = new URLStream();
urlStream.endian = Endian.LITTLE_ENDIAN;
var request:URLRequest = new URLRequest(HOST_NAME + "test.xml");
addEventListeners();
urlStream.load(request);
}

private function addEventListeners():void
{
urlStream.addEventListener(Event.COMPLETE, completeHandler);
urlStream.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
urlStream.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
urlStream.addEventListener(ProgressEvent.PROGRESS, progressHandler);
}

private function removeEventListeners():void
{
urlStream.removeEventListener(Event.COMPLETE, completeHandler);
urlStream.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
urlStream.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
urlStream.removeEventListener(ProgressEvent.PROGRESS, progressHandler);
}

private function completeHandler(event:Event):void
{
var remoteData:
var clientFile = new File('D:/test.xml');
var clientStream:FileStream = new FileStream();
clientStream.open(clientFile, FileMode.WRITE);

while(urlStream.bytesAvailable)
{
var value:int = urlStream.readByte();
clientStream.writeByte(value);
}

clientStream.close();
urlStream.close();
}

private function ioErrorHandler(event:IOErrorEvent):void
{
trace("IOError / " + event.type);
}

private function securityErrorHandler(event:SecurityErrorEvent):void
{
trace("Security Error / " + event.sandboxType);
}

private function progressHandler(event:ProgressEvent):void
{
var percent:Number;
percent = Math.round((bytesLoaded * 100) / bytesTotal);
trace(percent + "% complete");
}


아주 간단한 만든 샘플인데 일단 서버의 파일에 접근해서 readByte로 읽어온다. 읽어온 value를 미리 선언해 뒀던 클라이언트 파일에 writeByte로 작성에 넣는 작업을 수행하게 되어있다.
아주 간단하게 구성되어있는 이 소스를 기반으로 여러가지 작업을 할 수 있게 되었는데
대표적으로 모듈단위의 AIR 업데이트를 수행하는 것이나 서버의 이미지 파일을 지정된 위치에
지정한 이름으로 저장할 수 있게 하는 FileReference.browse() 메서드 기능을 구현할 수도 있다.
잘만 만들면 FTP 비슷한 프로그램을 만드는 것도 가능할 것이다.
2009/04/19 02:55 2009/04/19 02:55