Tomcatを使ったJavaのWebアプリケーションのファイルのアップロードについて質問です。

以下のような形で取得したコンテキストの下に、アップロードしたファイルにブラウザからアクセスできるようにするために、ファイルを保存するようにしています。
String path = getServletContext().getRealPath("files");

Webアプリケーションの更新を行うときに、Tomcat Webアプリケーションマネージャを使ってアプリケーションの「配備解除」をした後に、「WARファイルの配備」で更新したwarファイルを置いているのですが、その際に、アップロードしたファイルが全て消えてしまいします。

warファイルを更新するたびにアップロードしたファイルが消えては困るのですが、どのように対処すればいいのでしょうか?
データベースにアップロードしたファイルを保存することを検討していますが、他に方法がありましたらご教授ください。

よろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2008/07/15 12:20:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:un0 No.1

回答回数651ベストアンサー獲得回数32

ポイント32pt

配備解除したときに消えるものを思われます。

その前にバックアップ

配備解除

ファイルの配備

リストア

でいかがでしょうか。

id:hananomai

やっぱりバックアップを取るしかないですかねえ。

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

2008/07/08 12:42:17
id:tarchan No.2

回答回数200ベストアンサー獲得回数2

ポイント16pt

アップロードしたファイルの保存場所をサーブレットの外に置けば大丈夫だと思います。

id:hananomai

回答ありがとうございます。

サーブレットの外というのはコンテキストの外という意味でしょうか。

外に置くと、そのままだとブラウザからアクセスが出来なくなってしまいますので、ファイルを読みに行く処理を実装する必要がありますので、少し面倒かと思っています。

あるいは、アップロードしたファイルを保存する専用のコンテキストを作るという案を今思いつきましたが、そういう方法もありでしょうか。

2008/07/08 16:06:11
id:tarchan No.3

回答回数200ベストアンサー獲得回数2

ポイント32pt

ブラウザから直接ブラウズしたいということなら、mod_aliasを使ってアップロードしたファイルの保存場所を公開することもできます。

http://httpd.apache.org/docs/2.2/ja/mod/mod_alias.html

id:hananomai

再度の回答ありがとうございます。

Apacheを使うのが前提であれば、mod_aliasを使うのが簡単そうですね。

私の今回の環境だと、

<Location />

ProxyPass ajp://localhost:8009/

</Location>

としてしまっているので、

Alias /upload "/upload"

<Location /upload>

ProxyPass !

</Location>

のようにしてやる必要がありました。

2008/07/08 17:37:15

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません