Ir al contenido

Almacenamiento

Rebase proporciona almacenamiento de archivos integrado con dos opciones de backend:

  • Sistema de archivos local — Archivos almacenados en disco (ideal para desarrollo)
  • Compatible con S3 — AWS S3, MinIO, Cloudflare R2, DigitalOcean Spaces
await initializeRebaseBackend({
// ...
storage: {
type: "local",
basePath: "./uploads" // Directorio para el almacenamiento de archivos
}
});
import { env } from "./env";
await initializeRebaseBackend({
// ...
storage: {
type: "s3",
bucket: env.S3_BUCKET!,
region: env.S3_REGION || "us-east-1",
accessKeyId: env.S3_ACCESS_KEY_ID!,
secretAccessKey: env.S3_SECRET_ACCESS_KEY!,
// Opcional: endpoint personalizado para MinIO, R2, etc.
endpoint: env.S3_ENDPOINT
}
});

Puede configurar múltiples backends de almacenamiento y enrutar diferentes campos a diferentes backends:

storage: {
"(default)": { type: "local", basePath: "./uploads" },
"media": { type: "s3", bucket: "media-bucket", region: "us-east-1", ... }
}
MétodoRutaDescripción
POST/api/storage/uploadSubir un archivo
GET/api/storage/files/:pathDescargar/servir un archivo
DELETE/api/storage/files/:pathEliminar un archivo

Para añadir cargas de archivos a sus colecciones, use la propiedad storage en campos de tipo string:

properties: {
image: {
type: "string",
name: "Imagen del Producto",
storage: {
storagePath: "products", // Subdirectorio en el almacenamiento
acceptedFiles: ["image/*"], // Filtro de tipo MIME
maxSize: 5 * 1024 * 1024, // 5MB máximo
fileName: (context) => { // Nombre de archivo personalizado
return context.entityId + "_" + context.file.name;
}
}
},
documents: {
type: "array",
name: "Documentos",
of: {
type: "string",
storage: {
storagePath: "documents",
acceptedFiles: ["application/pdf", "image/*"]
}
}
}
}

Campo de carga de archivos

Opciones de Configuración de Almacenamiento

Sección titulada «Opciones de Configuración de Almacenamiento»
PropiedadTipoDescripción
storagePathstringSubdirectorio dentro del backend de almacenamiento
acceptedFilesstring[]Tipos MIME permitidos (p. ej., ["image/*"], ["application/pdf"])
maxSizenumberTamaño máximo de archivo en bytes
fileNamefunctionGenerador de nombre de archivo personalizado
metadataobjectMetadatos adicionales para almacenar con el archivo
storeUrlbooleanAlmacena la URL completa en lugar de la ruta relativa

Envuelva la propiedad storage en un array para cargas de múltiples archivos:

photos: {
type: "array",
name: "Fotos",
of: {
type: "string",
storage: {
storagePath: "photos",
acceptedFiles: ["image/*"]
}
}
}

Carga de múltiples archivos

Para operaciones programáticas de archivos:

import { useStorageSource } from "@rebasepro/core";
const storageSource = useStorageSource();
// Subir un archivo
const result = await storageSource.uploadFile({
file,
fileName: "my-file.pdf",
path: "documents"
});
// Obtener URL de descarga
const url = await storageSource.getDownloadURL(result.path);
  • Monte un volumen persistente si usa almacenamiento local en Docker/Kubernetes
  • Use S3 o compatible (R2, MinIO) para despliegues de producción
  • Configure una CDN (CloudFront, Cloudflare) delante de su bucket S3 para mejorar el rendimiento