이미지 다운로드 및 업로드 배치(batch) 작업을 위해 Adobe AIR 데스크탑 어플을 만들었습니다.
가끔씩 쓰는 코드는 블로그에 적어두는게 좋더군요. 구글링도 잘 되고요. ㅎㅎ

아래는 파일을 다운로드 받아서 저장하는 함수입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
var file:File;

function downloadFile(url:String, callback:Function):void
{
    file = File.desktopDirectory.resolvePath('tmp' + File.separator + (new Date().time.toString() + '.png'));
    file.addEventListener(IOErrorEvent.IO_ERROR, function ():void {
        trace("에러!! 재시도!!");
    });
   
    var urlStream:URLStream = new URLStream();
    var request:URLRequest = new URLRequest(url);
    var fileStream:FileStream = new FileStream();
   
    function on_Progress(e:ProgressEvent):void
    {
        var dataBuffer:ByteArray = new ByteArray();
        urlStream.readBytes(dataBuffer, 0, urlStream.bytesAvailable);
        fileStream.writeBytes(dataBuffer, 0, dataBuffer.length);
    }
   
    function on_Complete(e:Event):void
    {
        fileStream.close();
        urlStream.close();
       
        setTimeout(callback, 100);
    }
   
    urlStream.addEventListener(Event.COMPLETE, on_Complete);
    urlStream.addEventListener(ProgressEvent.PROGRESS, on_Progress);
   
    fileStream.openAsync(file, FileMode.WRITE);
   
    urlStream.load(request);
}

function completed()
{
    trace("다운로드 완료");
}
downloadFile("http://~.png", completed);

아래는 업로드 하는 코드입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var params:URLVariables = new URLVariables();
params.foo = 'any string';

file.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, function (de:DataEvent):void {
    trace(de.data);
});

var request:URLRequest = new URLRequest("http://~/upload");
request.data = params;
request.method = URLRequestMethod.POST;
var header:URLRequestHeader = new URLRequestHeader("enctype", "multipart/form-data");
request.requestHeaders.push(header);

file.upload(request, "userfile");