4

Netbeans 6.8 + Glassfish で Apache 共通ファイルアップロード ライブラリを使用しています。現在のアップロード パスをサーブレットの現在のコンテキスト パスに変更しようとしています。次のようになります: WEB-INF/upload

だから私は書いた:

File uploadedFile = new File("WEB-INF/upload/"+fileName);
session.setAttribute("path",uploadedFile.getAbsolutePath());
item.write(uploadedFile);

しかし、ライブラリがアップロードされたファイルをglassfishフォルダーに保存することに気付きました.ここでは、アップロードされたファイルの絶対パスを印刷すると得られるものです:

C:\Program Files\sges-v3\glassfish\domains\domain1\WEB-INF\upload\xx.rar 

私の質問 :

  • アップロードされたファイルを現在のサーブレット パスからの相対パスに保存するように共通のファイル アップロードを強制するにはどうすればよいですか。パス全体を指定する必要はありません。これは可能ですか?
4

1 に答える 1

8

java.io.Fileローカル ディスク ファイル システム上で動作し、それが実行されているコンテキストについてはまったく何も知りません。相対 Web パスを渡したときに「正しい」場所が見つかるとは期待しないでください。現在の作業ディレクトリに対して相対的になります。これは、環境をどのように開始したかによって異なります。あなたはそれに依存したくありません。

を使用ServletContext#getRealPath()して、相対 Web パスを絶対ローカル ディスク ファイル システム パスに変換できます。

String relativeWebPath = "/WEB-INF/uploads";
String absoluteFilePath = getServletContext().getRealPath(relativeWebPath);
File uploadedFile = new File(absoluteFilePath, FilenameUtils.getName(item.getName()));
// ...

そうは言っても、デプロイ フォルダーは、永続的に保存されるはずのアップロードされたファイルの正しい場所ではないことを認識していただければ幸いです。Web アプリケーションを再デプロイすると、すべてが失われます。アプリのリソース/画像フォルダーにファイルを書き込む方法も参照してください。

于 2010-05-25T11:32:32.323 に答える