Documentación/Amazon S3
Amazon S3
Almacenamiento de objetos AWS S3 y compatible con S3, incluyendo Cloudflare R2 y MinIO.
De un vistazo
- Categoría — Almacenamiento de objetos
- Lenguaje de query — Explorador de objetos (sin lenguaje de query)
- Esquema de URI —
s3
Driver de almacenamiento de objetos AWS S3 y compatible con S3 para DBFlux,
construido sobre el SDK aws-sdk-s3.
Está detrás del feature flag s3.
Funcionalidades
- Driver de almacenamiento de objetos clasificado como
DatabaseCategory::ObjectStorage, que conecta a AWS S3 y a endpoints compatibles con S3 (Cloudflare R2, MinIO) mediante unAuthProfileRefde perfil/SSO de AWS o credenciales estáticas de access-key, con override de endpoint y direccionamiento por path-style. - Browsing de buckets: una tabla dedicada de buckets (name, region, object count, size, versioning, created) con búsqueda, refresh y creación de buckets; la barra lateral lista los buckets planos, un nivel de profundidad.
- Navegación paginada de objetos por nivel por defecto (estilo consola de AWS, usando el continuation token devuelto por el driver), con un toggle opcional de modo árbol para expansión completa no paginada.
- Diseño dividido árbol/vista previa en el explorador de objetos: las filas de objeto muestran key, size, storage class y last-modified; las filas de directorio muestran conteos de objetos hijos.
- Matriz de vista previa: las imágenes se renderizan de forma nativa vía
img(); los objetos tipo texto (txt, md, json, csv, log, …) se abren en un buffer editable inline con badge de cambios sin guardar, Ctrl+S para guardar (put_object), Discard, y una confirmación de ediciones sin guardar al navegar fuera; PDF y otros objetos binarios recurren a metadata más descarga/apertura externa, sin renderizado de PDF dentro de la app. - Metadata completa de objeto (key, size, content-type, last modified, ETag, storage class, encryption, versions donde estén disponibles), con estilizado por storage class distinguiendo STANDARD/STANDARD_IA/GLACIER y objetos archivados degradando a solo-metadata (sin intento de obtener el body).
- Límite de tamaño de vista previa configurable, verificado mediante una request HEAD antes de obtener el body de cualquier objeto.
- CRUD: eliminación de un solo objeto, eliminación recursiva de prefix/bucket
(modal de peligro con confirmación por escritura de texto,
DeleteObjectspor lotes de hasta 1000 keys/request), creación de carpetas (marcador de prefix de cero bytes), creación de buckets (validación de nombre, región, versioning/block-public-access/object-lock, encryption por defecto con degradación elegante en endpoints no soportados), subida simple por streaming (put_object/ByteStream, sin multipart), y renombrado de objetos (copiar y luego eliminar, vinculado ar, nunca aF2). - URLs prefirmadas: elección de método GET/PUT, expiración de 15 minutos/1 hora/12 horas/7 días, acción de copiar URL, y texto de advertencia nombrando la expiración y la identidad de firma.
- Cada operación CRUD/mutación (upload, delete, delete recursivo, creación de
carpeta/bucket, eliminación de bucket, guardado de edición, renombrado,
presign) se audita bajo la
EventCategoryde object-storage, sin que las credenciales ni las URLs prefirmadas se registren ni persistan jamás. - Los errores de permiso y de no-encontrado (
AccessDenied,NoSuchBucket,NoSuchKey) se formatean con el bucket/key afectado nombrado en el mensaje, no solo con el texto de error genérico de AWS.
Limitaciones
- Sin subida multipart ni panel de Transfers dedicado — las subidas siempre
pasan por una única llamada
put_objectde streaming, sin importar el tamaño del archivo. - Sin visor de PDF embebido; PDF y otros objetos que no son imagen/texto solo ofrecen metadata, descarga y apertura externa.
- Sin gestión de reglas de lifecycle ni de ACLs, y sin S3 Select.
- El renombrado es copiar-y-eliminar sin rollback: si el delete tras una copia exitosa falla, tanto la key de origen como la de destino quedan en su lugar y el usuario debe reintentar el delete manualmente.
delete_bucketsolo tiene éxito en un bucket vacío; eliminar un bucket no vacío se rechaza del lado del cliente con un mensaje que apunta al flujo de eliminación recursiva de prefix/bucket.- La vista previa y la visualización de metadata están condicionadas por HEAD:
el size y la storage class de un objeto siempre se obtienen vía
head_objectantes de intentar cualquier vista previa del body. - Las pruebas de integración en vivo respaldadas por MinIO requieren Docker y se
ejecutan con
cargo nextest run -p dbflux_driver_s3 --run-ignored all.