Archivos y multimedia
Almacena archivos y multimedia desde tu app. Cada archivo obtiene una URL pública permanente.
Los medios en Proyecta se organizan en dos capas. La mayoría de las apps usan la capacidad de medios del CMS integrado — cargas de imágenes y archivos que la IA conecta automáticamente en tu panel de administración y formularios. Por debajo de eso, una Files API de nivel más bajo te da control directo cuando lo necesitas. Ambas almacenan en object storage respaldado por CDN y devuelven una URL pública permanente.
Archivos adjuntos en el chat
Sección titulada «Archivos adjuntos en el chat»El campo de chat acepta imágenes directamente — pega una captura de pantalla o arrastra un archivo de imagen al campo. Formatos compatibles: PNG, JPEG, WebP, GIF, AVIF. Tamaño máximo: 10 MB por imagen.
Los archivos adjuntos en el chat son parte del mensaje, no de tu biblioteca de archivos. Para almacenamiento persistente, usa las cargas de medios integradas o la Files API.
Cargas de medios integradas (la capacidad de medios del CMS)
Sección titulada «Cargas de medios integradas (la capacidad de medios del CMS)»La mayoría de las apps no usan la Files API directamente — los medios son una capacidad integrada del CMS. La plantilla de la app incluye dos hooks de carga en @/hooks/useContent, y la IA los conecta en tu interfaz. Describes lo que necesitas (“un campo de imagen en mis productos”, “una carga de archivo en mi formulario de contacto”) y Proyecta usa el correcto:
| Hook | Dónde se usa | Endpoint | Límite de tamaño |
|---|---|---|---|
useAssetUpload() |
Biblioteca de medios del administrador — respalda el selector de recursos en el editor de contenido del panel de administración | POST /v1/public/files |
10 MB |
useFormFileUpload() |
Archivos de formularios públicos — cargas de visitantes en un campo de archivo <FormBlock/> (recibos, fotos) |
POST /v1/public/uploads |
5 MB |
Ambos hooks devuelven una url pública permanente que almacenas en la entrada de contenido (administrador) o en el envío del formulario (público). Algunas cosas que debes saber:
- Ambos límites se aplican en el código, no según el plan — 10 MB para medios del administrador, 5 MB para archivos de formularios públicos.
- Los tipos aceptados son imágenes (excepto SVG) y PDF únicamente. SVG se rechaza por seguridad; las imágenes grandes se reducen automáticamente antes de la carga.
- No llamas a estos hooks directamente — la IA los configura. Usa la Files API que se describe a continuación solo para manejo de archivos de nivel más bajo o personalizado.
La Files API
Sección titulada «La Files API»Toda app publicada de Proyecta puede almacenar y servir archivos. Desde las páginas de tu app esto es una sola llamada — el baile de varios pasos de la carga firmada se resuelve por ti:
import * as platform from '@/lib/platformClient.ts';
// Upload straight from a file input — one call, no signed-URL jugglingasync function onPick(file: File) { const asset = await platform.assetDirectUpload({ blob: file, filename: file.name, mimeType: file.type, }); console.log(asset.url); // permanent public URL}
// List what's storedconst { assets, hasMore } = await platform.assetList({ limit: 20 });
// Remove oneawait platform.assetDelete(asset.id);Archivos privados. Pasa visibility: 'private' para guardar un archivo fuera del bucket público, sin URL permanente. Léelo de vuelta con un enlace de corta duración:
const { url, expiresAt } = await platform.assetSignedUrl(asset.id, { variant: 'thumbnail' });Usa privado + URLs firmadas para todo lo que no deba ser adivinable — cargas de clientes, documentos de identidad, descargas de pago.
¿Cómo se suben archivos a mi app?
Sección titulada «¿Cómo se suben archivos a mi app?»Las cargas de archivos se gestionan a través del AI builder. Pídele a la IA que construya el flujo de carga por ti:
"Let users upload a profile photo and store it in Proyecta Files""Add an image gallery where signed-in users can upload and view their photos""Let me attach PDF invoices to orders"
La IA configura la carga en el código de tu app y referencia la URL pública devuelta.
Preguntas frecuentes
Sección titulada «Preguntas frecuentes»¿Las URLs de los archivos son públicas?
Sí. Cualquier archivo devuelto por la Files API tiene una URL pública permanente. No subas nada que no quieras exponer.
¿Qué tan grande puede ser un archivo?
Los tamaños de archivo tienen límites definidos en el código, no según el plan: 10 MB para cargas a la biblioteca de medios del administrador (useAssetUpload), 5 MB para cargas de archivos en formularios públicos (useFormFileUpload), y 10 MB para archivos adjuntos en el chat. Las cargas de medios integradas aceptan imágenes (excepto SVG) y PDF únicamente.
¿Puedo redimensionar o recortar imágenes desde la URL?
Las transformaciones de imágenes en tiempo real (redimensionar, recortar, conversión de formato) están en el roadmap.
Próximamente
Sección titulada «Próximamente»- Transformaciones de imágenes mediante parámetros en la URL (redimensionar, recortar, conversión de formato)
- Organización por carpetas — crea y gestiona rutas de carpetas para los archivos almacenados