Duda sobre donde guardar archivos de imagen para un sistema


#1

Hola:
estoy en proceso de hacer un par de aplicaciones o sistemas api rest(quiero intentar de hacerlo con spring boot)
y me surge la duda sobre como guardar las imágenes(cada producto va a tener varias imágenes, públicas), si con el sistema tradicional de guardarlo en el mismo sitio donde van a estar los archivos de la aplicación o hacerlo mediante blobs o usar amazon o google para esto.

Vosotros como lo hacéis o como recomendáis??

Gracias por la ayuda.
Un saludo.


#2

Los servidores basados en Java «reescriben» toda la carpeta dónde están los ficheros de la aplicación, así que si tuvieses que volver a subir la app (una actualización) perderías todas las imágenes.

Lo que tienes que hacer es tener una carpeta externa (en cualquier ruta), en la que tengas permisos de escritura y añadirla como resource indicándole una URL.

    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        super.addResourceHandlers(registry);
        registry.addResourceHandler("/fotos/**")
                .addResourceLocations("file:/home/bernard/app/fotos");
    }

De esta forma, si accede a la URL /fotos/articulo1/foto1.jpeg obtendrá la foto que esté en /home/bernard/app/fotos/articulo1/foto.jpeg

Cuando subas las fotos, evidentemente, tendrás que guardarla en la ruta que corresponda.

Lo mejor es que tengas en una variable la ruta /home/bernard/app/fotos por si quieres cambiarla después no tener que estar buscando todos los sitios dónde la usas.

Puedes crear tantos resources como quieras con diferentes URLs o usar como statics o uploads para todo y ya dividir por sub-carpetas.


#3

Gracias por tu respuesta Miguel Angel.
Anoto la explicación para cuando me toque lidiar con ese punto concreto (para evitar que cuando se actualice la app se pierdan los archivos) aunque la pregunta iba más dirigida a si cuando se prevean muchos archivos( muchas fotos para cada producto y muchos productos) es mejor hospedarlos en el hosting(supongo que un vps en empresa por determinar donde también está la app) o mejor barajar la posibilidad de los archivos llevarlos a amazon web services s3, azure o google cloud storage.


#4

AAmmsss… Me he liado.

Supongo que dependerá de la carga visitas que esperes.

Los sistemas externos permiten escalar fácilmente, replicar en diferentes servidores (Europa, Estados Unidos, China…) para tener mayor velocidad y a la larga sale más barato el alojamiento.

Por contra, aumenta la complejidad de la aplicación de la aplicación, no demasiado pues es hay bibliotecas que simplifica mucho el proceso, pero bueno.

Quizás lo único reseñable es que, inicialmente, el coste del servidor es mayor, pero poco más.


#5

Gracias de nuevo.
Anoto también que para tomar una decisión de alojar los archivos en uno u otro una de las cosas que hay que valorar es si se esperan muchos usuarios a la vez accediendo a estos recursos. Bueno, poco a poco a ver si lo consigo, jeje.

Saludos.


#6

Este tema se cerró automáticamente 20 días después del último post. No se permiten nuevas respuestas.