カスタム検索

2009年2月5日木曜日

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

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

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

BlazeDSではActionScriptの byte[] と Java の byte[] をコンバートして通せるようなので、ファイルをbyteにして投げてやります。
  1. private function blazeDsUpload():void {  
  2.   // ファイルをバイト配列で読み込む  
  3.   var file:File=new File("/opt/hoge.jpg");  
  4.   var fs:FileStream=new FileStream();  
  5.   var bytes:ByteArray=new ByteArray();  
  6.   fs.open(file, FileMode.READ);  
  7.   fs.readBytes(bytes, 0, file.size);  
  8.   
  9.   //定義してあるRemoteObjectへパラメーターとして渡す  
  10.   remoteObject.upload({"Filedata":bytes});  
  11. }  


Grailsのサービス側で受け取るサンプル
byte[]データをファイルへ収めてやります。
  1. def upload(params) {  
  2.   def fileBytes=params["Filedata"]  
  3.   def file=new File("/work/hoge.jpg")  
  4.   file.withOutputStream { out ->  
  5.     out.write(fileBytes)  
  6.   }  
  7. }  

0 件のコメント: