Package com.gestorrh.api.service
Class FileStorageService
java.lang.Object
com.gestorrh.api.service.FileStorageService
Servicio encargado de la gestión de almacenamiento de archivos en el sistema de ficheros local del servidor.
Proporciona funcionalidades para la subida segura, recuperación y borrado de archivos, implementando mecanismos de defensa contra ataques de tipo Path Traversal y restricciones estrictas sobre las extensiones de archivos permitidas.
Los archivos se almacenan bajo nombres únicos generados automáticamente para evitar conflictos y garantizar la privacidad.
-
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionFileStorageService(String uploadDir) Inicializa el servicio configurando el directorio raíz donde se almacenarán los archivos. -
Method Summary
Modifier and TypeMethodDescriptionorg.springframework.core.io.ResourcecargarArchivoComoRecurso(String fileName) Recupera un archivo del almacenamiento local como un recurso cargable.voideliminarArchivo(String fileName) Elimina de forma definitiva un archivo del sistema de ficheros.guardarArchivo(org.springframework.web.multipart.MultipartFile file) Almacena de forma física un archivo recibido mediante una petición HTTP Multipart.private StringobtenerExtension(String fileName) Utilidad privada para extraer la extensión de un nombre de archivo completo.
-
Field Details
-
fileStorageLocation
-
extensionesPermitidas
-
-
Constructor Details
-
FileStorageService
Inicializa el servicio configurando el directorio raíz donde se almacenarán los archivos. Si el directorio no existe, intenta crearlo de forma recursiva.- Parameters:
uploadDir- Ruta del directorio de subida (inyectada desde la configuración de la aplicación).- Throws:
RuntimeException- Si el directorio no puede ser creado por falta de permisos o errores de E/S.
-
-
Method Details
-
guardarArchivo
Almacena de forma física un archivo recibido mediante una petición HTTP Multipart.El proceso de guardado incluye:
- Limpieza y normalización de la ruta del archivo original.
- Validación contra ataques de secuencia de punto-punto (Path Traversal).
- Verificación de la extensión del archivo contra una lista blanca permitida.
- Generación de un identificador único universal (UUID) para el nombre del archivo.
- Copia binaria del flujo de entrada en la ubicación de almacenamiento configurada.
- Parameters:
file- El objetoMultipartFileque contiene el flujo binario y metadatos del archivo original.- Returns:
- String El nombre único generado (UUID + extensión) bajo el cual el archivo ha sido persistido.
- Throws:
RuntimeException- Si el archivo es nulo, tiene una extensión no autorizada o si ocurre un error de E/S.
-
cargarArchivoComoRecurso
Recupera un archivo del almacenamiento local como un recurso cargable. Se utiliza para servir archivos (ej. justificantes o imágenes) a través de la API.- Parameters:
fileName- Nombre del archivo que se desea recuperar.- Returns:
- Resource Objeto cargable que representa el contenido del archivo.
- Throws:
RuntimeException- Si el archivo no existe o la ruta está mal formada.
-
eliminarArchivo
Elimina de forma definitiva un archivo del sistema de ficheros. Se utiliza habitualmente al actualizar archivos antiguos o al borrar registros asociados.- Parameters:
fileName- Nombre del archivo físico que se pretende eliminar.
-
obtenerExtension
Utilidad privada para extraer la extensión de un nombre de archivo completo.- Parameters:
fileName- Nombre original del archivo (ej. "justificante.pdf").- Returns:
- String La extensión del archivo (ej. "pdf"), o una cadena vacía si no tiene.
-