3

私はCMSを開発していますが、ユーザーが自分の画像やCSSファイルなどをアップロードできるようにしたいと考えています。リソースの安全のために、アップロードされたファイルをアプリケーション構造/デプロイされたWAR内に保存したくありません。

グレイル以外の場所のコントローラーから、グレイルでコンテンツを提供する最も簡単な方法は何ですか?

4

3 に答える 3

1

彼の投稿でcdavis226によって説明されているように、リモートファイルシステムフォルダを指すコンテキストエイリアスを追加します。

http://web.archive.org/web/20190906142211/http://grails.1312388.n4.nabble.com/How-to-configure-context-xml-aliases-for-Tomcat-7-td4632149.html

このソリューションは、GrailsのデフォルトのTomcatサーバーを使用している場合に機能します。

于 2013-01-22T17:34:44.380 に答える
1

適切なツールを介して静的コンテンツを提供することは正しい方法であり、すべてのWebサーバーはこれを実現する可能性を提供します。Grailsアプリケーションでこのコンテンツの管理を実装する場合は、静的コンテンツの宛先をConfig.groovyで構成可能にするだけです。

コントローラを介したファイルシステムからのコンテンツのロードを実装しないでください。車輪の再発明を行っています;-)また、Webサーバーのパフォーマンスははるかに優れています;-)

于 2012-10-20T07:59:45.757 に答える
1

多くの調査と質問を行った後、静的リソース(画像など)をデータベースにパッケージ化することにしました。これの利点は次のとおりです。

  1. アプリケーション内にイメージをパッケージ化する必要はありません(再デプロイするとすべてのイメージが失われる可能性があります)
  2. アプリケーションから離れたサーバー上の別の場所に画像を保存する必要はありません。
  3. AmazonS3などのサードパーティサービスを使用する必要はありません。
  4. データベースからファイルを提供するための単純なコントローラーの作成は比較的簡単です。

欠点は次のとおりです。

  1. ファイルシステム上のファイルにアクセス/操作することはできません。
  2. データベースは大きくなり、非常に遅くなる可能性があります。
  3. 誰かが画像をリクエストするたびにデータベースを呼び出す必要があります。

これらの欠点はありますが、私は解決策を採用することにしました。これが私がそれらに対処した方法です:

  1. 100%オンラインシステムなので、これは問題ではありません。
  2. 私の画像は小さくてあまりないので問題ありません。
  3. 効率的で簡単なキャッシュメカニズムを利用しました。下記参照:

私はSmartBrowserCachingを使用しており、etags(ドキュメント)を使用し、EHCache(ドキュメント)を使用して画像サーバー側をキャッシュしています。新しい画像がアップロードされるとすぐに、eタグが変更され、キャッシュがクリアされ、ブラウザに新しいコピーをダウンロードするように強制されます。

これまでのところ、MySQLデータベースからのパフォーマンスの低下は目立たず、パフォーマンスは非常に高速です。

于 2012-11-19T16:13:36.703 に答える