1

Spring/hibernate でApache Common FileUploadを使用して JSP に画像をアップロードしようとしています。画像のアップロードはうまくいきます。私のプロジェクト フォルダーは、次のパスにあります。

E:\Project\SpringHibernet\wagafashionNew\wagafashion

リクエストを解析した後、アップロードした画像を次のフォルダーに保存しようとしています。

E:\Project\SpringHibernet\wagafashionNew\wagafashion\web\images

このパスを取得するためにさまざまな方法を試しましたが、成功しませんでした。

次のような相対パスを指定する

File f=new File("wagafashion/web/images/image_file.xxx");

動作しません。

次のパスを取得する方法はありますか?

E:\Project\SpringHibernet\wagafashionNew\wagafashion\web\images

new File("relative_file_path")またはコンストラクターで相対パスを指定しますか?

ファイルを間違ったディレクトリに保存していませんか? その場合、どのプロジェクト フォルダ ファイルを保存しますか?

4

1 に答える 1

3

多分。

1 つの方法は、ServletContext に getRealPath("/web/images") を要求し、それが何かを返すかどうかを確認することです。返す必要はありませんが、返される可能性があります。もしそうなら、そこに画像を置くことができます。

でも。

WAR を使用してほとんどの人と同じように展開している場合、ほとんどのコンテナーは WAR を展開してファイル システムに展開するため、再展開するとすぐにこれらのイメージはすべてなくなります。これを行う前にディレクトリにあったもの (つまり、最後にデプロイしたときのコードとアーティファクト) はすべてさようなら、イメージを「失う」ことになります。

これは、ディレクトリ展開を行うことで軽減できます。つまり、展開済みのディレクトリを展開します。次に、アプリケーションがどこにあるかがわかります (そこに配置したため)。次に、変更を加えたときにそのディレクトリを新しいコードと同期するのはあなた次第です (特に、不要になった古いものを削除するのはあなた次第です)。

それ以外には、コンテナごとに、外部ディレクトリをアプリケーション空間にマッピングするためのメカニズムが異なります。Glassfish には、使用できる「代替ドキュメント ルート」という概念があります。これにより、静的なものが存在し、コンテナによって引き続き提供される場所をデプロイの外に置くことができますが、再デプロイしても消去されません。

最後に、コンテナーにまったく依存することなく、いつでも自分でそれを実行したり、独自の画像をストリーミングしたりできます。このようにして、イメージをファイル システム、データベース、メモリなどに配置できます。

于 2012-08-13T21:59:40.930 に答える