ページの更新後にのみ利用可能なアップロードされたイメージへの回答に記載されている理由により、IDEのプロジェクトフォルダーまたはサーバーのデプロイフォルダー以外のアクセス可能な場所に保存します。
IDEのプロジェクトフォルダの変更は、サーバーの作業フォルダにすぐには反映されません。IDEには一種のバックグラウンドジョブがあり、サーバーの作業フォルダーが最後の更新と同期されます(これはIDE用語では "発行"と呼ばれます)。これが、発生している問題の主な原因です。
実際のコードでは、アップロードされたファイルをwebappのデプロイフォルダーに保存してもまったく機能しない場合があります。一部のサーバーは(デフォルトまたは設定により)デプロイされたWARファイルをローカルディスクファイルシステムに展開せず、代わりに完全にメモリに展開します。基本的に、デプロイされたWARファイルを編集して再デプロイしないと、メモリに新しいファイルを作成できません。
サーバーがデプロイされたWARファイルをローカルディスクファイルシステムに展開しても、新しく作成されたすべてのファイルは、元のWARファイルの一部ではないため、再デプロイまたは単純な再起動で失われます。
methodを使用しないgetRealPath()
限り、ローカルディスクファイルシステムのどこに保存されるかは、私や他の人には関係ありません。その方法を使用すると、いずれにしても憂慮すべきことです。
保存場所へのパスは、さまざまな方法で定義できます。あなたはそれをすべて自分でしなければなりません。おそらくこれは、サーバーがすべてを自動的に実行することを何らかの形で期待していたため、混乱が生じている場所です。は最終的なアップロード先を指定して@MultipartConfig(location)
いませんが、ケースファイルサイズの一時的な保存場所がメモリストレージのしきい値を超えていることに注意してください。
したがって、最終的な保管場所へのパスは、次のいずれかの方法で定義できます。
ハードコード:
File uploads = new File("/path/to/uploads");
を介した環境変数SET UPLOAD_LOCATION=/path/to/uploads
:
File uploads = new File(System.getenv("UPLOAD_LOCATION"));
サーバー起動時のVM引数-Dupload.location="/path/to/uploads"
:
File uploads = new File(System.getProperty("upload.location"));
*.properties
ファイルエントリupload.location=/path/to/uploads
:
File uploads = new File(properties.getProperty("upload.location"));
web.xml
<context-param>
名前upload.location
と値/path/to/uploads
:
File uploads = new File(getServletContext().getInitParameter("upload.location"));
存在する場合は、サーバー提供の場所を使用します(例:JBoss AS / WildFly)。
File uploads = new File(System.getProperty("jboss.server.data.dir"), "uploads");
どちらの方法でも、次のようにファイルを簡単に参照して保存できます。
File file = new File(uploads, "somefilename.ext");
try (InputStream input = part.getInputStream()) {
Files.copy(input, file.toPath());
}
または、一意のファイル名を自動生成して、ユーザーが既存のファイルを誤って同じ名前で上書きしないようにする場合:
File file = File.createTempFile("somefilename-", ".ext", uploads);
try (InputStream input = part.getInputStream()) {
Files.copy(input, file.toPath(), StandardCopyOption.REPLACE_EXISTING);
}
part
JSP /サーブレットで取得する方法は、JSP /サーブレットを使用してサーバーにファイルをアップロードする方法で答えられていますか?part
JSFで取得する方法は、JSF 2.2 <h:inputFile>を使用してファイルをアップロードする方法で答えられていますか?保存されたファイルはどこにありますか?
注:で定義された一時的な保存場所に対する相対パスを解釈するため、使用しないでください。Part#write()
@MultipartConfig(location)
以下も参照してください。