1

Amazon Elastic ブロック ストレージで作成した EBS ボリュームの 1 つからファイルをダウンロードしたいと考えています。ほとんどの場合、使用することをおServletContext#getResource()勧めServletContext#getResourceAsStream()ます

ただし、この場合、次のコードをお勧めします

InputStream in = new FileInputStream(new File(FOLDER_PATH_ON_AMAZON_EBS + "/" + folder + "/" + fileName));

4

2 に答える 2

1

ここで質問が何であるかを判断するのは難しいです。

getServletContext()またはnew File(PATH_TO_EBS ...)のどちらを使用する方がよいかを尋ねる場合は、実行している内容によって異なります。スタンドアロンのJavaアプリケーションを実行していて、ソケットを介してファイルを要求している場合は、後者を使用します(どこを見ればよいかがわかっているファイルに対するFileInputStream)。Webサーバー(Tomcatなど)を実行していて、Webクライアントを使用してファイルをダウンロードする場合は、通常、getServletContext()を使用します。これはWebサーバーインフラストラクチャの一部であるためです。

どちらの方法でもファイルのハンドルを取得できますが、getServletContext()は、Tomcatの作業領域の下にあるアプリケーションの場所を参照します。EBSボリュームを、Tomcatの作業領域から簡単にアクセスできる場所にマウントしますか。

Webサーバーを実行していて、新しいFileInputStream(new File(MY_EBS_LOCATION + "/" + ...))を使用してEBSボリューム内のファイルに直接アクセスできる場合は、必ずそれを使用してください-明確で簡単です。

于 2012-08-07T08:56:16.297 に答える
0

次の理由により、プロパティ ファイルにファイル パスがあり、絶対パスを使用する方が適切です。

  • ec2 ボリュームのマウントポイントが変更される可能性があります。クラスパスにマウントポイントがあり、それを変更することは、プロパティ ファイルのエントリを変更するよりも比較的困難です。
  • 通常、プロパティ ファイルなどのリソースは getResource() を使用して取得します。写真やオフィス ドキュメントの保存などの他の IO がある場合は、アクセスに絶対パスを使用するのが賢明です。

ファイル(リソース)がアプリケーションによって頻繁に使用され、アプリケーションのみで使用される場合は、ユースケースにも依存します。その場合、それをクラスパスに入れ、アーカイブと一緒にパックできます。

于 2012-08-02T11:02:55.213 に答える