Pular para o conteúdo

Armazenamento

Rebase oferece armazenamento de arquivos integrado com duas opções de backend:

  • Sistema de arquivos local — Arquivos armazenados em disco (ótimo para desenvolvimento)
  • Compatível com S3 — AWS S3, MinIO, Cloudflare R2, DigitalOcean Spaces
await initializeRebaseBackend({
// ...
storage: {
type: "local",
basePath: "./uploads" // Directory for file storage
}
});
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!,
// Optional: custom endpoint for MinIO, R2, etc.
endpoint: env.S3_ENDPOINT
}
});

Você pode configurar múltiplos backends de armazenamento e direcionar diferentes campos para diferentes backends:

storage: {
"(default)": { type: "local", basePath: "./uploads" },
"media": { type: "s3", bucket: "media-bucket", region: "us-east-1", ... }
}
MétodoCaminhoDescrição
POST/api/storage/uploadFazer upload de um arquivo
GET/api/storage/files/:pathBaixar/servir um arquivo
DELETE/api/storage/files/:pathExcluir um arquivo

Para adicionar uploads de arquivo às suas coleções, use a propriedade storage em campos de string:

properties: {
image: {
type: "string",
name: "Product Image",
storage: {
storagePath: "products", // Subdirectory in storage
acceptedFiles: ["image/*"], // MIME type filter
maxSize: 5 * 1024 * 1024, // 5MB max
fileName: (context) => { // Custom filename
return context.entityId + "_" + context.file.name;
}
}
},
documents: {
type: "array",
name: "Documents",
of: {
type: "string",
storage: {
storagePath: "documents",
acceptedFiles: ["application/pdf", "image/*"]
}
}
}
}

Campo de upload de arquivo

PropriedadeTipoDescrição
storagePathstringSubdiretório dentro do backend de armazenamento
acceptedFilesstring[]Tipos MIME permitidos (por exemplo, ["image/*"], ["application/pdf"])
maxSizenumberTamanho máximo do arquivo em bytes
fileNamefunctionGerador de nome de arquivo personalizado
metadataobjectMetadados adicionais para armazenar com o arquivo
storeUrlbooleanArmazena a URL completa em vez do caminho relativo

Envolva a propriedade storage em um array para múltiplos uploads de arquivo:

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

Upload de múltiplos arquivos

Para operações programáticas de arquivo:

import { useStorageSource } from "@rebasepro/core";
const storageSource = useStorageSource();
// Upload a file
const result = await storageSource.uploadFile({
file,
fileName: "my-file.pdf",
path: "documents"
});
// Get download URL
const url = await storageSource.getDownloadURL(result.path);
  • Monte um volume persistente se estiver usando armazenamento local em Docker/Kubernetes
  • Use S3 ou compatível (R2, MinIO) para implantações em produção
  • Configure uma CDN (CloudFront, Cloudflare) na frente do seu bucket S3 para desempenho