カスタム検索

2009年2月5日木曜日

Grails+BlazeDSでファイルアップロード

FileReferenceを使ったアップロードでは browse() が必須になります。
ファイルを選択してアップする場合は問題ないのですが、決まったファイルのアップロード(別システムから出力されるデータなど)を行う場合には不便です。

なのでBlazeDSでアップロードしてやりましょう。
GrailsでBlazeDSは過去のエントリを参照に。

BlazeDSではActionScriptの byte[] と Java の byte[] をコンバートして通せるようなので、ファイルをbyteにして投げてやります。

private function blazeDsUpload():void {
// ファイルをバイト配列で読み込む
var file:File=new File("/opt/hoge.jpg");
var fs:FileStream=new FileStream();
var bytes:ByteArray=new ByteArray();
fs.open(file, FileMode.READ);
fs.readBytes(bytes, 0, file.size);

//定義してあるRemoteObjectへパラメーターとして渡す
remoteObject.upload({"Filedata":bytes});
}


Grailsのサービス側で受け取るサンプル
byte[]データをファイルへ収めてやります。

def upload(params) {
def fileBytes=params["Filedata"]
def file=new File("/work/hoge.jpg")
file.withOutputStream { out ->
out.write(fileBytes)
}
}

0 件のコメント: