Ir al contenido
angel.library

Subidas de archivos y object storage

El object storage almacena objetos por clave, no como un sistema de archivos local compartido. En despliegues con varias instancias o serverless, guardar en el disco del proceso suele ser temporal y no está disponible para los demás servidores.

1. Cliente solicita permiso y metadatos al backend.
2. Backend autoriza, crea una clave no predecible y firma una URL limitada.
3. Cliente sube directamente al almacenamiento.
4. Backend confirma o recibe un evento, valida y marca el archivo disponible.

La URL debe limitar método, clave, tamaño aproximado, tipo permitido y expiración. El cliente no decide una ruta pública arbitraria.

const objectKey = `${tenantId}/${crypto.randomUUID()}`
const upload = await storage.createSignedUpload({
key: objectKey,
expiresInSeconds: 300,
contentType: "image/png"
})
  • Límite de bytes antes y durante la lectura.
  • Tipo real mediante firma o decodificación, no solo extensión.
  • Dimensiones, páginas o duración máximas.
  • Nombre original tratado como metadato, nunca como ruta.
  • Escaneo y procesamiento en cuarentena.
  • Re-encode de imágenes cuando corresponda.

No sirvas HTML, SVG u otros contenidos activos desde el mismo origen de la aplicación sin una política explícita. Usa otro dominio, Content-Disposition: attachment y headers apropiados.

Que una persona conozca la URL no significa que tenga permiso. Para objetos privados, el backend autoriza y entrega una URL de descarga de corta duración. Registra propietario, tenant, estado, hash, tamaño y política de retención en la base de datos.

Programa la eliminación de cargas incompletas, versiones reemplazadas y archivos cuya retención terminó. La eliminación debe considerar copias, miniaturas, índices de IA y backups según la política del producto.