カスタム検索

2009年2月4日水曜日

Air+Grailsでファイルアップロードの巻

AirにはFileReferenceというアップロード用のクラスが用意されてますので、そいつを使います。

  1.  var fileRef:FileReference=new FileReference();  
  2.  fileRef.addEventListener(Event.SELECT,selectHandler);  
  3.  fileRef.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);  
  4.  fileRef.browse();  
  5.   
  6. // ファイル選択後アップロード処理を実行  
  7. private function selectHandler(event:Event):void {  
  8.   var file:FileReference = FileReference(event.target);  
  9.   var uploadURL:URLRequest = new URLRequest();  
  10.   uploadURL.url = "http://localhost:8080/grails/sample/upload";  
  11.   file.upload(uploadURL);  
  12. }  
  13.   
  14. // これがないとエラー画面が出ました  
  15. private function ioErrorHandler(event:IOErrorEvent):void {  
  16. }  


Grails側に受けのアクションを作ってやります。
普通にMultiPartFormDataが来るので、処理してやるだけです。
  1. class SampleController {  
  2.   def upload={  
  3.     def file=request.getFile("Filedata")  
  4.     file.transferTo(new File("/hoge",params["Filename"]))  
  5.   }  
  6. }  

1 件のコメント:

匿名 さんのコメント...

はじめまして。

WEBで検索してきました。
私もAIRとGrails(1.2)を使っているのですが、ファイルアップロードができません。
他にサンプルが無く、途方にくれています。

//AIR部
var _urlRequest:URLRequest = new URLRequest();
_urlRequest.url = _url;
fileRef.upload(_urlRequest, "ticketFile");

//grails部
def file=request.getFile("ticketFile")
file.transferTo(new File("/hoge",params["Filename"]))


groovy.lang.MissingMethodException: No signature of method:org.apache.catalina.core.ApplicationHttpRequest.getFile() is applicable for argument types: (java.lang.String) values: [ticketFile]

唯一、Javaではサーブレットのソースだとうまく行くのですが、grails,strutsからはHTTPrequestからのファイルデータの取得に失敗します。

grailsのHTTPRequestは他ライブラリを使っているのでしょうか?

コメントで場違いで申し訳ありません、どこが悪いのでしょうか?お答えいただければありがたいです。