Medios (Media)
Visión general
Crono incluye una biblioteca de medios para gestionar imágenes, documentos y archivos descargables. Los metadatos de cada archivo residen en la entidad MedioArchivo, mientras que los datos binarios los maneja un proveedor de almacenamiento intercambiable. Los archivos se organizan en carpetas (MedioCarpeta) y álbumes, se rastrean y se vigilan para permitir la limpieza segura de los que no se usan.
IMedioServicio es la interfaz principal para las operaciones administrativas y de aplicación: abstrae la ubicación física del almacenamiento y ofrece utilidades para consultar, guardar y eliminar medios.
Proveedores de almacenamiento
Un proveedor de almacenamiento gestiona el binario asociado a cada MedioArchivo. Crono soporta almacenamiento en sistema de archivos (carpeta en disco) y en base de datos (para entornos sin un sistema de archivos compartido). El proveedor activo se indica en la configuración de medios.
Trabajar con medios
IMedioServicio ofrece métodos de alto nivel:
- Obtener archivos:
ObtenerArchivoPorIdAsync,ObtenerArchivoPorRutaAsync,ObtenerArchivoPorNombreAsync,ObtenerArchivosPorIdsAsync, oBuscarArchivosAsync(MedioBusquedaConsulta). - Crear o actualizar:
GuardarArchivoAsync. - Copiar, mover o eliminar:
CopiarArchivoAsync,EliminarArchivoAsync, con detección de duplicados y validación de rastreo. - Utilidades:
CombinarRutas,ComprobarNombreArchivoUnicoAsync,ArchivoExisteAsync.
Ejemplo de subida
public class SubidaServicio
{
private readonly IMedioServicio _medioServicio;
private readonly IMedioUrlGenerador _urlGenerador;
public SubidaServicio(IMedioServicio medioServicio, IMedioUrlGenerador urlGenerador)
{
_medioServicio = medioServicio;
_urlGenerador = urlGenerador;
}
public async Task<string> SubirAsync(Stream flujo, string nombreArchivo)
{
// Guardar el archivo de forma permanente dentro de la carpeta "subidas"
var ruta = _medioServicio.CombinarRutas("subidas", nombreArchivo);
var info = await _medioServicio.GuardarArchivoAsync(ruta, flujo /* , ... */);
// Construir una URL pública
return _urlGenerador.ObtenerUrl(info);
}
}
Rastreo y metadatos
Los archivos admiten etiquetas y textos alternativos localizados. Cuando un archivo se enlaza a otra entidad (por ejemplo, la imagen de un préstamo o de un cliente), se genera un registro de rastreo que protege contra la eliminación accidental e identifica los medios huérfanos. Los detectores de duplicados (DetectoresDuplicacion) permiten identificar archivos idénticos antes de almacenarlos comparando su contenido binario.
URLs e imágenes
IMedioUrlGenerador genera las URLs públicas de los archivos siguiendo rutas consistentes. En Crono, la generación de imágenes/documentos derivados (por ejemplo, constancias en PDF o imagen) se apoya en los convertidores nativos (wkhtmltopdf / wkhtmltoimage) descritos en las notas de versión, con almacenamiento del resultado como descarga.