Almacenamiento de objetos para archivos de usuarios: deja de llenar el disco de tu servidor
Toda aplicación acaba aceptando un archivo: un avatar, una factura en PDF, una foto de producto. El primer instinto es escribirlo en una carpeta del servidor — y ese instinto es exactamente lo que llena tu disco, rompe tus despliegues y bloquea tu escalado. Los avatares, los PDF y las imágenes no pertenecen al disco de tu servidor de aplicaciones. Un bucket de Nest Storage los hace duraderos, baratos y listos para CDN, y esta guía te enseña cómo llegar ahí.
Por qué el disco local te falla
Una carpeta llena de archivos subidos funciona bien hasta el día en que deja de hacerlo. El disco se llena silenciosamente en segundo plano, y el primer síntoma suele ser que tu base de datos o tus logs fallan porque la carpeta de subidas se comió el último gigabyte. Peor aún: muchas configuraciones de despliegue reemplazan el directorio de release completo — un despliegue, y todos los archivos que tus usuarios te confiaron desaparecen.
Luego llega el escalado. En cuanto añades un segundo servidor detrás de un balanceador de carga, la mitad de las peticiones aterrizan en una máquina que no tiene el archivo. Las sesiones fijas y los apaños con rsync solo aplazan el problema. Los archivos que viven en el disco de una sola máquina son, por definición, un punto único de fallo.
El flujo de subida que funciona
El patrón es sencillo: el cliente envía el archivo a tu API (o directamente al bucket con una URL prefirmada), tu API lo empuja a un bucket de Nest Storage, y el bucket devuelve una clave de objeto. Esa clave — no el archivo — es lo que guardas en tu base de datos.
Tu base de datos se mantiene pequeña y rápida, tus servidores siguen sin estado, y el archivo en sí vive en un lugar construido para la durabilidad. Aquí está todo el flujo en dos líneas:
const { key } = await nest.upload("avatars", file);
await db.user.update({ id, avatarKey: key });Buckets privados vs. públicos
No todos los archivos merecen el mismo trato. Los logos, las imágenes de producto y otros recursos del sitio pueden vivir en un bucket público y servirse directamente — idealmente a través de un CDN con dominio personalizado. Cualquiera puede leerlos, y esa es precisamente la idea.
Los documentos de los usuarios son otra historia. Las facturas, los contratos y los documentos de identidad pertenecen a un bucket privado, y tu API concede acceso generando URL firmadas que caducan a los pocos minutos. El archivo nunca es accesible públicamente; solo lo es el enlace que acabas de crear.
- Bucket público para imágenes y recursos estáticos
- Bucket privado con URL firmadas que caducan para los documentos
- Buckets separados por entorno, para que staging nunca toque los archivos de producción
Nomenclatura, versionado y limpieza
Las claves de objeto son tu sistema de archivado, así que elige los prefijos con cabeza: avatars/{userId}/… o invoices/2026/04/… hacen que listar, migrar y borrar archivos por usuario o por fecha sea trivial. Un URI nest:// con una estructura de claves limpia se documenta solo.
Activa el versionado en los buckets donde una sobrescritura accidental haría daño — la versión antigua queda a una llamada de API de distancia en lugar de perderse para siempre. Y añade reglas de ciclo de vida para barrer los archivos huérfanos: las subidas cuya fila en la base de datos fue eliminada, o los archivos temporales de más de una semana, se limpian automáticamente en lugar de costarte dinero eternamente.
Cuánto cuesta
Con Nest Storage pagas solo por dos cosas: el almacenamiento que realmente usas y el ancho de banda que realmente sirves. Sin cobros por petición ni sorpresas en la factura — los precios están en ₹, son predecibles y fáciles de calcular antes de comprometerte.
Hay un nivel gratuito lo bastante generoso para proyectos personales, así que la función de subida de avatares que construyas este fin de semana no cuesta nada hasta que lleguen usuarios de verdad. Y cuando lleguen, el mismo bucket, la misma API y las mismas claves siguen funcionando — solo que con una cuota mayor.
¿Listo para ponerlo en práctica?
Pon en marcha un servidor, una base de datos o un bucket — niveles gratuitos incluidos.