sql >> Base de Datos >  >> RDS >> Mysql

Cómo guardo y recupero una imagen en mi servidor en una aplicación web Java

en lugar de escribirlo en mi unidad C, lo ejecutaré en el servidor, pero ¿dónde debo almacenar la imagen para recuperarla más tarde y mostrarla en un archivo xhtml?

Eso depende de cuánto control tenga sobre la configuración del servidor. Lo ideal sería configurar una ruta fija fuera de la carpeta de aplicaciones web de Tomcat. Por ejemplo, /var/webapp/upload . Puede configurar esta ruta como un argumento de VM o una variable de entorno para que su aplicación web pueda recuperarla mediante programación sin necesidad de cambiar el código.

Por ejemplo, al especificar como argumento de VM -Dupload.location=/var/webapp/upload , puede completar la carga de la siguiente manera:

Path folder = Paths.get(System.getProperty("upload.location"));
String filename = FilenameUtils.getBaseName(uploadedFile.getName()); 
String extension = FilenameUtils.getExtension(uploadedFile.getName());
Path file = Files.createTempFile(folder, filename + "-", "." + extension);

try (InputStream input = uploadedFile.getInputStream()) {
    Files.copy(input, file, StandardCopyOption.REPLACE_EXISTING);
}

String uploadedFileName = file.getFileName().toString();
// Now store it in DB.

En cuanto a devolver el archivo, lo ideal sería agregar la ubicación de carga como un <Context> separado a Tomcat. Por ejemplo

<Context docBase="/var/webapp/upload" path="/uploads" />

De esta manera, puede acceder directamente a través de http://example.com/uploads/foo-123456 .ext

Si no tiene ningún control sobre la configuración del servidor, entonces, almacenar en la base de datos o enviarlo a un host de terceros, como Amazon S3, es su mejor opción.

Ver también: