0

Spring と Hibernate を使用して画像をアップロードしています。以下のようにサーバーに画像を保存しています。

File savedFile = new File("E:/Project/SpringHibernet/MultiplexTicketBooking/web/images/" + itemName);
item.write(savedFile);

itemNameリクエストを解析した後のイメージ ファイル名はどこにありますか ( enctype="multipart/form-data")。ただし、のコンストラクターで相対パスについて言及する必要がありFileます。以下に示すようなもの。

File savedFile = new File("MultiplexTicketBooking/web/images/" + itemName);
item.write(savedFile);

しかし、それは動作しませんFileNotFoundExceptionFileJavaで相対パスを指定する方法はありますか?

4

4 に答える 4

3

プログラムから作業ディレクトリを印刷してみてください。

String curDir = System.getProperty("user.dir");

そのディレクトリを取得します。次に、MultiplexTicketBooking/web/images/そのディレクトリにディレクトリが存在するかどうかを確認します。

現在のディレクトリを間違えて、書き込み先のファイルを探すのに時間を費やした回数は数え切れません...

于 2012-06-16T21:56:28.857 に答える
2

getContextPath()メソッドまたはに見られるように、サーバーは機能を提供する必要があるようgetRealPath(String)です。これらのタイプのサーバー関連の再現可能なパスに基づいてパスを構築するのが一般的です。サーバーでほとんど意味をなさないようなものを使用しないでください。user.dir

アップデート

ServletContext sc=request.getSession().getServletContext(); 
File savedFile = new File(sc.getRealPath("images")+"\\" + itemName);

使用するのではなく"\\"、次のように置き換える傾向があります。これにより、各プラットフォームで正しいファイルセパレータが使用されます。クライアントがMS/ISSベースのサーバーをLinux/Tomcatスタックに交換することを決定した場合に備えて、クロスプラットフォームの互換性を維持します。;)

File savedFile = new File(sc.getRealPath("images"), itemName); //note the ','

詳細File(String,String)はをご覧ください。

于 2012-06-16T22:19:15.953 に答える
2

次を使用してプロジェクトのパスを取得できます-

File file = new File("");
System.out.println("" + file.getAbsolutePath());

したがって、相対パスの後にあるパスを定義できるファイルconstantsまたはファイルを持つことができます。propertiesMultiplexTicketBooking/web/images/

取得したパスにパスを追加するfile.getAbsolutePath()と、それがファイルの実際のパスになります。- file.getAbsolutePath() + MultiplexTicketBooking/web/images/.

プロジェクト パスの後のフォルダーMultiplexTicketBooking/web/images/が存在することを確認します。

于 2012-06-16T21:56:14.390 に答える
1

で絶対パスと相対パスの両方を指定できますFileFileNotFoundExceptionフォルダーがそこにある可能性があるため、がスローされる可能性があります。最初にメソッドを使用してmkdirs()、ファイルを保存しようとしている場所に保存するために必要なフォルダー構造を作成してみてください。

于 2012-06-16T21:54:52.150 に答える