Im tratando de acceder al ejemplo/ carpeta web (ver más abajo en la imagen) en un grano de JSF logrado, pero no puede parecer a encontrar una manera de hacerloRecuperar la ruta raíz aplicación web en JSF Bean administrado
THX
Im tratando de acceder al ejemplo/ carpeta web (ver más abajo en la imagen) en un grano de JSF logrado, pero no puede parecer a encontrar una manera de hacerloRecuperar la ruta raíz aplicación web en JSF Bean administrado
THX
Si desea obtener como un File
por alguna razón, entonces es necesario ExternalContext#getRealPath()
. Esto convierte una ruta web relativa a un sistema de archivos de disco absoluto. Ya que se necesita la carpeta raíz de la web, sólo tiene que pasar en /
:
String absoluteWebPath = externalContext.getRealPath("/");
File webRoot = new File(absoluteWebPath);
// ...
Sin relación al problema concreto, cualquiera que sea requisito funcional que ha tenido en cuenta para la que pensaban que tener un disco local absoluta La ruta de acceso del sistema de archivos a la carpeta web es la solución correcta, definitivamente tiene que resolverse de manera diferente. Y, en efecto, de acuerdo con sus comentarios sobre la otra respuesta,
porque estoy tratando de subir algún archivo dentro de la carpeta y el uso de la ruta relativa
vas por el camino equivocado. No debe almacenar archivos cargados allí si tiene la intención de mantenerlos más tiempo que la vida útil de implementación de la aplicación web. Cada vez que vuelva a implementar la aplicación web (y en algunas configuraciones del servidor, incluso cuando reinicie el servidor), los archivos cargados se perderán por completo, simplemente porque no están contenidos como parte del archivo WAR original. Aún más, algunas configuraciones pesadas del servidor no expanden el WAR en el disco, pero en su lugar, en la memoria, el getRealPath()
siempre devolverá null
.
En lugar de almacenarlo en una ruta de sistema de archivos de disco fuera de la carpeta de despliegue del servidor. Agregue esa ruta a su vez como un nuevo contexto de servidor o docroot, para que esté accesible en una ruta de contexto diferente (virtual). O homegrow un servlet que obtiene un InputStream
del disco y lo escribe en OutputStream
de la respuesta. Véase también esta respuesta relacionada: Uploaded image only available after refreshing the page
Trate
FacesContext.getCurrentInstance().getExternalContext().getRequestContextPath()
para la acumulación de URL relativos a los recursos en su aplicación.
Si desea que el camino real ...
ServletContext ctx = (ServletContext) FacesContext.getCurrentInstance()
.getExternalContext().getContext();
String realPath = ctx.getRealPath("/");
agradable, gracias, pero ¿es posible obtener la ruta absoluta, porque estoy tratando de subir algún archivo dentro de la carpeta y el uso de la relación ruta Estoy obteniendo java.io.FileNotFoundException: \ example (Acceso denegado) – hari
Agregué para 'realPath' –
Probar:
String relativePath="/resources/temp/";
String absolutePath= FacesContext.getCurrentInstance.getExternalContext().getRealPath(relativePath);
File file = new File(absolutePath);
para obtener la ruta real.
Cree un archivo tmp en resources/temp/para evitar cualquier excepción.
Sólo quería agradecer a Balus C.Código Java con JSP, en el servidor Tomcat/Tomee que el siguiente código que funciona:
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;
}
gracias por su respuesta, buscaré un poco más en el almacenamiento de imágenes y volveré si tengo alguna pregunta – hari