Estoy tratando de almacenar el logotipo del cliente en "src/main/webapp/clientImage/clientcode" . El directorio de código de cliente se creará en función de diferentes 2 clientes.
Por ejemplo, si el código del cliente es PRUEBA, la ruta completa será como "src/main/webapp/clientImage/TEST" y cuando carguemos la imagen del cliente, el logotipo del cliente aparecerá en el directorio "PRUEBA".
Entonces, después de cargar el logotipo del cliente (suponga que el nombre de la imagen es "test.jpeg", el directorio completo será "src/main/webapp/clientImage/TEST/test.jpeg" . El código para cargar el logotipo del cliente es:
`public boolean upload(UploadedFile uploadFile) { String LOGO_PATH= "/clientImage/"; String fileName = uploadFile.getFileName(); String realPath = FacesContext.getCurrentInstance().getExternalContext().getRealPath(LOGO_PATH + selectedClient.getClientCode()); File f = new File(realPath); if (!f.exists()) { f.mkdirs(); logger.debug("Directory created : {}", f.getName()); } try { new UserUtils().copyFile(fileName, uploadFile.getInputstream(), realPath); selectedClient.setLogo(fileName); saveClient(); FacesMessage msg = new FacesMessage("Success! ", uploadFile.getFileName() + " set as logo."); FacesContext.getCurrentInstance().addMessage(null, msg); return true; } catch (IOException e) { logger.error("{}", e); return false; } }
`
Problema:: Mi problema es cuando estoy cargando el logotipo para el cliente de PRUEBA, la ruta real que obtengo es "C:\Users\narendra\tls_workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\ilock \ImagenCliente\PRUEBA"
donde se supone que realPath es "src/main/webapp/clientImage/TEST/test.jpeg" y el logotipo debe almacenarse en el directorio TEST, pero el logotipo ni siquiera ingresa a ese directorio
No estás ejecutando la fuente en sí. Sus archivos fuente se compilan en clases, luego sus clases y recursos se empaquetan en un archivo de aplicación web, un archivo WAR. Por lo tanto, su ruta real no está en src, está donde se implementa su WAR. En su caso, está en los archivos tmp de Eclipse, porque lo está ejecutando desde Eclipse.
La idea de cargar archivos en el directorio de origen no tiene sentido, porque su directorio de origen no se implementará en el servidor, sino el WAR empaquetado. Si vende su aplicación web, probablemente no enviará su código fuente a su cliente; le enviará un ejecutable, es decir, un archivo WAR.
Tampoco debe mantener los datos del usuario en su WAR. Su WAR debe ser inmutable durante su tiempo de ejecución. En su lugar, debe solicitar a su servidor o Java un directorio temporal o algún tipo de directorio de datos. Por ejemplo, los servidores Wildfly tienen estas propiedades del sistema:
jboss.server.data.dir - directorio que utilizará el servidor para el almacenamiento persistente de archivos de datos jboss.server.temp.dir - directorio que utilizará el servidor para el almacenamiento de archivos temporales