読者です 読者をやめる 読者になる 読者になる

ファイルアップロード

AIRで試してみた。
AIRでファイル選択のダイアログを出すのは、以下のような書き方でいける。

var file:File = File.desktopDirectory;
file.browseForOpen("ファイルオープン");

Flexだと、以下のような書き方だった。

var fileRef:FileReferenceList = new FileReferenceList();
fileRef.browse();

後は、ファイルが選択されたときのイベントを登録して、ごにょごにょとやればOK。
以下の方法で、サーバーサイドにbyte[]データとして渡せた。
AIRだとできるみたい。

var file:File = File.desktopDirectory;
file.addEventListener(Event.SELECT,selectHandler);
file.browseForOpen("ファイルオープン");

function selectHandler(event:Event):void{
    var file:File = File(event.target);
    var stream:FileStream = new FileStream();
    stream.open(file,FileMode.READ);
    var bytes:ByteArray = new ByteArray();
    stream.readBytes(bytes,0,file.size);
    //リモートオブジェクトのupload(byte[] bytes) メソッド呼び出し
    srv.upload(bytes);
    stream.close();
}

追記
これだと、ローカルでByteArrayにコピーすることになるから、サイズの大きいファイルをアップロードするとローカルでのメモリ消費量が増えることになるなぁ。
やっぱりFileReference#upload使う方がいいのかな。サーバー側でUploadを受け付けるServletなどを用意しておけばいいだけなんだけどね。