• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:webアプリケーションでの画像ファイルの保存場所)

webアプリケーションでの画像ファイルの保存場所

このQ&Aのポイント
  • webアプリケーションにおける画像ファイルの保存場所について
  • webアプリケーションでユーザーがアップロードした画像ファイルの保存場所について
  • webアプリケーションでの画像ファイルの適切な保存場所にはどこがあるのか

質問者が選んだベストアンサー

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.4

こんにちは。 検索すればいろんなサンプルが出てくると思いますよ。 すごく簡単に書くとしたら // 画像ファイルのパス File file = new File ( "/home/・・・・" ); response.setHeader ( "Content-Type", "image/jpeg" ); response.setContentLength ( (int)file.length() ); // 出力と入力 ServletOutputStream out = response.getOutputStream(); BufferedInputStream in = new BufferedInputStream ( new FileInputStream(file) ); int data = 0; while ( (data = in.read()) != -1 ) { // 書き出す out.write(data); } in.close(); out.close(); これをサーブレットなりで呼び出してあげれば、任意の場所の画像ファイルを出力します。 (実際の運用ではパラメータでID等を渡してDBからファイル名を取得する) これを応用すると、必ずサーブレットなりを介さないとファイルには直接アクセスできないため、 認証をさせたり、ダウンロード数を把握したり、期限を設定したりいろいろ出来るようになります。

piraippi
質問者

お礼

LancerVII様 有難うございました。 かなり分かってきました! ありがとうございます。 ベストアンサーとさせて頂きます!!

すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.3

>「デプロイしても消されない場所に置けばいい」ということでしょうか? 基本的にはそれでよいと思います。 1) 別の HTTPサーバに置く。 2) 別のファイル保管専用のWebアプリの中に置く 3) 任意のファイルシステム上のフォルダやFTPサーバにおいて Servlet でアクセスする。

piraippi
質問者

補足

tknakamuri様 ご回答有り難うございます。 1はユーザーが画像をアップしたら、 そのタイミングで、別サーバーに転送するということだと思います (もちろん、ファイル名が被らないようにリネームしてあげる必要があると思います)。 2と3もだいたいそうことだと思いますが合っているでしょうか。 また、ネットを見ていましたら、データベースに登録し、 それを読み込み表示するということもできるようですね。 DB保存パターンでももうちょっと調べてみたいと思います。 ありがとうございます。

すると、全ての回答が全文表示されます。
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.2

こんにちは。 ディレクトリ名からしたらテンポラリファイルの置き場所と考えるので永続的に利用するファイルを格納するのは避けます。 (例えば他の人がtempディレクトリだから中のファイル消しちゃえとか) ディレクトリを作成できる権限があるなら任意のディレクトリを作成してそこに格納すれば良いと思います。 >jspから(※1)の場所にアクセスできるのか? <img src="xxx/xxx.jpg">というパスでは無理ですね。 ROOT配下がドキュメントルートのはずですので。 なので先の回答にある方法で取得します。 jspでもServletでも良いですが、ファイルを直接読み込んで適切なヘッダを設定し書き出してあげれば、直接アクセスできない部分にファイルを保管しても、ブラウザ上で表示が可能です。

piraippi
質問者

補足

LancerVII様 ご回答有り難うございます。 >ディレクトリを作成できる権限があるなら任意のディレクトリを作成してそこに格納すれば良いと思います。 >jspでもServletでも良いですが、ファイルを直接読み込んで適切なヘッダを設定し >書き出してあげれば、直接アクセスできない部分にファイルを保管しても、ブラウザ上で表示が可能です。 以下のように理解したのですが、合っていますでしょうか? 任意のディレクトリに画像を保存し、jsp(or Servlet)から読み込む。 その後、ファイルごとにヘッダを指定してあげる。 その後書き出してあげれば、画面に表示される。 理屈はなんとなく分かってきましたが、 実際にコードに書くとなると手が止まってしまいます。 もうちょっとだけアドバイスいただけると嬉しいです (実際のコードはこんなかんじだよとかございましたら。。。。)。

すると、全ての回答が全文表示されます。
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 通常TomcatとApacheを連携させて実運用すると思いますので、ユーザが登録するファイルなんかは全てApache側に保存しています。 または外から見えない場所に置いて、サーブレット経由でファイルを取得したりしています。 (ダウンロードさせるファイル等)

piraippi
質問者

補足

LancerVII様 御回答有り難うございます。 作成しているアプリケーションは、jelastic(http://jelastic.com/ja/java-paas)とう サービスを利用しています。 このサービスの環境作成で、tomcatをアプリサーバーとして作成していますので、アパッチとの連携はしておりません。 (説明が足りず申し訳ありませんでした) 現在のディレクトリ構成を確認したら以下のようになっていました。 /root |-bin |-conf |-lib |-logs |-temp (※1) |-webapps   |-ROOT    |-META-INF    |-WEB-INF    |-css    |-img    |-js    |-jsp    |-tmp    |-index.jsp この場合は(※1)のtempに置くのがいいのでしょうか? しかし、jspから(※1)の場所にアクセスできるのか?という疑問が生まれてしまいます。 よろしければアドバイスをお願い致します。

すると、全ての回答が全文表示されます。

関連するQ&A