JavaEEWebアプリケーションを開発しました。このアプリケーションを使用すると、ユーザーはブラウザを使用してファイルをアップロードできます。ユーザーがファイルをアップロードすると、このアプリケーションは最初にアップロードされたファイルをサーバー(サーバーが実行されているサーバー)に保存してから処理します。
現在、次のようにファイルをサーバーに保存しています。
try {
// formFile represents the uploaded file
FormFile formFile = programForm.getTheFile();
String path = getServlet().getServletContext().getRealPath("") + "/"
+ formFile.getFileName();
System.out.println(path);
file = new File(path);
outputStream = new FileOutputStream(file);
outputStream.write(formFile.getFileData());
}
ここで、formFile
はアップロードされたファイルを表します。
問題は、一部のサーバーでは正常に実行されているが、一部のサーバーでgetServlet().getServletContext().getRealPath("")
はが返さnull
れるため、取得する最終パスがnull/filename
サーバーに保存されないことです。
APIのServletContext.getRealPath()
メソッドを確認したところ、次のことがわかりました。
public java.lang.String getRealPath(java.lang.String path)
指定された仮想パスの実際のパスを含む文字列を返します。たとえば、パス
"/index.html"
はサーバーのファイルシステム上の絶対ファイルパスを返します"http://host/contextPath/index.html"
。ここで、contextPathはこのServletContextのコンテキストパスです。返される実際のパスは、適切なパスセパレータを含め、サーブレットコンテナが実行されているコンピュータとオペレーティングシステムに適した形式になります。サーブレットコンテナが何らかの理由(コンテンツが.warアーカイブから利用可能になっている場合など)で仮想パスを実際のパスに変換できない場合、このメソッドはnullを返します。
null
だから、私がそれらのサーバーにファイルを保存することができる他の方法はありますか?getServlet().getServletContext().getRealPath("")