2009-02-20 8 views
5

私は単純なgrailsファイルアップロードアプリを持っています。grails base.dirシステムのプロパティ

ファイルをファイルシステムに保存するには、transferToを使用しています。

私はWAS 6.1サーバーにデプロイする場合、これは常にnullであるいくつかの理由について

def basePath = System.properties['base.dir'] // HERE IS HOW I GET IT 

     println "Getting new file" 
     println "copying file to "+basePath+"/files" 
     def f = request.getFile('file') 
     def okcontents = ['application/zip','application/x-zip-compressed'] 
     if (! okcontents.contains(f.getContentType())) { 
      flash.message = "File must be of a valid zip archive" 
      render(view:'create', model:[zone:create]) 
      return; 
     } 
       if(!f.empty) { 
        f.transferTo(new File(basePath+"/files/"+zoneInstance.title+".zip")) 
       } 
       else 
       { 
        flash.message = 'file cannot be empty' 
         redirect(action:'upload') 
       } 
     println "Done getting new file" 

を使用しています、私のコントローラのベースパスを取得するには。

devを実行しているがWASサーバーでprodで動作していないのはなぜですか?この情報に別の方法でアクセスする必要がありますか?

答えて

4

おかげjについて可能にGrailsのConfigオブジェクト、

を使用するために、私は最高のダイナミックソリューションPOSSを見つけましたible。原則として、絶対パスをソフトウェアにコード化することは決してありません。プロパティファイルまたはいいえ。だからここ

は、それがどのように行われるかである。

def basePath = grailsAttributes.getApplicationContext().getResource("/files/").getFile().toString() 

grailsAttributes任意のコントローラで利用可能です。

getResource(relative dir)は、web-appフォルダの中に何かを探します。

だから、例えば私のdevのシステムでは、C」に出TOSTRINGます: C上記の私の例ではそのようにエンド

にconcated相対ディレクトリと\ WORKSPACEFOLDER \ PROJECTFOLDER \ウェブアプリの\を\ WORK 6.1で試してみましたが、コンテナ内で問題なく動作しました toStringを実行するか、オブジェクトを返そうとします。

mugafuga

3

Grailsは、devモードで実行されると、Gantスクリプトとbasedirを含むアプリケーションの順番でホストの環境プロパティを提供します。

grails.batまたはgrails.shスクリプトを見て、あなたはこれらの行を見つけるでしょう:これらのスクリプトは、あなたが得るDEVモードでご使用の環境を起動すると

Unix: -Dbase.dir="." \ 
Windows: set JAVA_OPTS=%JAVA_OPTS% -Dbase.dir="." 

をこれらは無料で投げ込まれます。

WARを使用して展開すると、これらのスクリプトを使用しなくなり、別の方法で問題を解決する必要があります。あなたはどちらか

  1. は例えば、アプリケーションサーバーの起動スクリプトにプロパティを自分で指定することができます-Dbase.dir = /いくつかの/ディレクトリ..しかし
4

決定的な方法コントローラ(例:ブートストラップ)の切れ...

grailsApplication.parentContext.getResource("dir/or/file").file.toString() 

がありますか?ちょうど注射してください。

def grailsApplication 

おめでとうございます!

+0

これは、現在の受け入れ答えよりも行くには良い方法です。 –

2

別のオプション:

DEF basePathを= BuildSettingsHolder.settings.baseDir

関連する問題