jsfマネージドBeanのexample/webフォルダー(画像の下を参照)にアクセスしようとしていますが、それを行う方法を見つけることができないようです
どうも
jsfマネージドBeanのexample/webフォルダー(画像の下を参照)にアクセスしようとしていますが、それを行う方法を見つけることができないようです
どうも
試す
FacesContext.getCurrentInstance().getExternalContext().getRequestContextPath()
アプリ内のリソースに対する相対URLを作成します。
実際のパスが必要な場合...
ServletContext ctx = (ServletContext) FacesContext.getCurrentInstance()
.getExternalContext().getContext();
String realPath = ctx.getRealPath("/");
File
何らかの理由でそれを取得したい場合は、が必要ExternalContext#getRealPath()
です。これにより、相対Webパスが絶対ディスクファイルシステムに変換されます。Webのルートフォルダが必要なので、次のように渡して/
ください。
String absoluteWebPath = externalContext.getRealPath("/");
File webRoot = new File(absoluteWebPath);
// ...
具体的な問題とは関係なく、Webフォルダへの絶対ローカルディスクファイルシステムパスを持つことが正しい解決策であると考えていた機能要件が何であれ、それは間違いなく別の方法で解決する必要があります。そして確かに、他の答えに対するあなたのコメントによると、
フォルダ内のファイルをアップロードしようとしていて、相対パスを使用しているためです
あなたは間違った道を進んでいます。アップロードされたファイルをWebアプリのデプロイ期間より長く保持する場合は、そこに保存しないでください。Webアプリケーションを再デプロイするたびに(およびサーバーを再起動した場合でも一部のサーバー構成で)、アップロードされたファイルは、元のWARファイルの一部として含まれていないという理由だけで完全に失われます。さらに、一部の重いサーバー構成は、ディスク上のWARをまったく拡張しませんが、代わりにメモリ内で、getRealPath()
常にを返しnull
ます。
むしろ、サーバーのデプロイフォルダーの外にある固定ディスクファイルシステムパスに保存します。そのパスを新しいサーバーコンテキストまたはdocrootとして順番に追加し、別の(仮想)コンテキストパスでアクセスできるようにします。または、ディスクからサーブレットを取得して応答にInputStream
書き込むサーブレットを自家栽培します。OutputStream
この関連する回答も参照してください:アップロードされた画像は、ページを更新した後にのみ利用可能です
試す:
String relativePath="/resources/temp/";
String absolutePath= FacesContext.getCurrentInstance.getExternalContext().getRealPath(relativePath);
File file = new File(absolutePath);
実際のパスを取得します。
例外を回避するために、resources /temp/にtmpファイルを作成します。
BalusCに感謝したいと思います。JSPを使用したJavaのコード。Tomcat/Tomeeサーバーでは、次のコードが機能します。
private Boolean SaveUserItemImage(Part ui, String bid) throws IOException {
Boolean fileCreate = false;
OutputStream out = null;
InputStream filecontent = null;
ExternalContext ctx = context().getExternalContext();
String absoluteWebPath = ctx.getRealPath("/");
String resource_path = absoluteWebPath + "\\resources\\";
String image_path = resource_path + "\\" + this.itemType + "_images\\";
String buildFileName = image_path + bid + "_" + getFileName(ui);
File files = null;
try {
files = new File(buildFileName);
fileCreate = true;
} catch (Exception ex) {
System.out.println("Error in Creating New File");
Logger.getLogger(ItemBean.class.getName()).log(Level.SEVERE, null, ex);
}
if (fileCreate == true) {
if (files.exists()) {
/// User may be using same image file name but has been editted
files.delete();
}
try {
out = new FileOutputStream(files);
filecontent = ui.getInputStream();
int read = 0;
final byte[] bytes = new byte[1024];
while ((read = filecontent.read(bytes)) != -1) {
out.write(bytes, 0, read);
}
fileCreate = true;
} catch (FileNotFoundException fne) {
fileCreate = false;
Logger.getLogger(ItemBean.class.getName()).log(Level.SEVERE, "SaveUserItemImage", fne);
} finally {
if (out != null) {
out.close();
}
if (filecontent != null) {
filecontent.close();
}
files = null;
}
}
return fileCreate;
}