2011-02-09 9 views
7

Grailsを使用して小さなWebアプリケーションを作成しました。生成されたwarファイルは、Tomcatアプリケーションサーバーにデプロイされます。GrailsとTomcat:ファイルシステムにアップロードされたファイルをどこに保存するのですか?

このアプリケーションには添付ファイルのアップロード機能があります。 DBにブロブを格納するのではなく、アップロードしたファイルをディスクに保存することを選択しました。

最初にwebapp-dirの中にファイルパスを選択してファイルを保存しましたが、このディレクトリは新しいwarファイルのすべての展開で上書きされることに気付きました。

「あなたのローカルのファイルシステムにアップロードされたファイルを保存する」ためのベストプラクティスはありますか?

ありがとうございました。

+0

Grailsのメーリングリストを読んだら、私はまったく同じ質問*があることに気付くでしょう。良い答えを期待しています。 –

+1

メーリングリストから何か役に立つものがあれば、ここに解決策を投稿してください。 – DiegoFrings

答えて

1

環境変数を使用して場所を保存したり、環境変数を使用して設定プロパティファイルの場所を設定したり、プロパティを設定することをお勧めします。このようにして、ファイルシステム/構成上の懸案事項を管理しているオペレーションチームが場所を設定できるようになります。

+0

interrestingは聞こえますが、運用チームはアプリケーションサーバーが処理できるパスに対してのみdirを設定できます。ファイルが保存される場合、 "/ tmp /"とすると、アプリケーションサーバーはこのイメージをブラウザに送ることができません。両方の要件を満たす良好な場所はどこですか?アプリケーションサーバーはファイルをブラウザに送信でき、ディレクトリはデプロイ時に上書きされません。 – DiegoFrings

+0

また、appserver/webserverの設定も制御する必要があります。また、コンテンツを配信する必要がある場合は、別の構成パラメータを、配信されるディレクトリのURLの場所にします。 – codelark

2

AlphaOneは、あなたが求めているものと似たようなことをしますが、Tomcatの前でApache Webサーバーを使用します。 configファイルからフルパスを取り出して書きます。 "/ tmp/branding"と言ってください。次に、設定ファイル(この例では "myapp/branding")からこの場所のURLパスを取得し、GSP内でこれを使用します。次に、Apacheでは、そのURL( "myapp/branding")のアプリケーションリクエストをTomcatを迂回してファイルの場所に直接マップします。

+1

警告の単語は、多くのオペレーティングシステムは時々tmpディレクトリをパージします。一定の日数が経過すると、ブート時に実行されることがよくあります。予期しないように見えることがあり、デバッグするのが難しい場合があります。 –

2

アップロード用に別のプロジェクトを作成し、ユーザー固有のフォルダを作成するためのユーザー名を渡します。ユーザーがファイルをアップロードするときにメインプロジェクトからこのプロジェクトへのリンクを提供します。

0

ベストプラクティスのソリューションを探していると思います。まあ、実際にはありませんが、あなたがそれらを入れないでくださいいくつかの場所があります。私はUNIX環境を想定します。例えば

  • の$ CATALINA_HOME。アプリケーションフォルダをそのまま残しておけば、アップロードしたファイルでそのファイルを汚染しないでください。
  • /tmp。あなたは誰がこれをきれいにするのか分からない。

ロックされた仕様であるかどうかはわかりませんが、linux directory structureをご覧ください。

私はそれを読む方法は、あなたは3つのオプションがあります。

  1. Tomcatは、専用のユーザー使用して実行されている場合 - >ユーザーのホームディレクトリを。たとえば〜/ Fileuploads/appname
  2. varはアプリケーションデータの増加するディレクトリとみなされる可能性があります。例:/ var/Fileuploads/appname
  3. システム管理者に任せてください。これをチェックアウト:Externalizing Grails Configuration

幸運!

関連する問題