Conclusiones clave
- Autoriza y valida a quien sube el archivo antes de crear una Assembly; un procesamiento de imagen exitoso no equivale a la aprobación de moderación.
- Elimina los metadatos incrustados del derivado de entrega y conserva cualquier evidencia de origen requerida bajo una política de retención independiente.
- Usa una ruta única con asset_id y assembly.id para que los reintentos no puedan sobrescribir imágenes revisadas; combínala con una comprobación de deduplicación en la aplicación.
Un pipeline de imágenes generadas por usuarios necesita más que un almacenamiento de objetos económico. La aplicación debe saber qué subida se aceptó, qué política de derivados se ejecutó, dónde reside el resultado y si se puede entregar. Las rutas de Backblaze sin colisiones y una clave de aplicación acotada mantienen los reintentos de almacenamiento separados de la moderación y del estado del producto.
Lo más importante
- Restringe la clave de aplicación estándar de B2 al bucket de destino y a un prefijo de salida estable, como community/web-v1/, que cubra todas las rutas que genera el Template.
- Usa las cabeceras X-Bz-Info-* para etiquetas estables del flujo de trabajo, no para datos privados de los usuarios ni nombres de archivo arbitrarios sin codificar.
- Entrega o autoriza el objeto final a través de la capa de entrega de la aplicación, en lugar de tratar la URL del resultado de almacenamiento como el modelo de permisos del producto.
Convierte la moderación y el procesamiento en estados separados
Una imagen válida no es necesariamente contenido que el producto debería mostrar. Registra quién la sube, el inquilino, la suma de comprobación del archivo de origen, el estado de moderación y la operación de procesamiento antes de iniciar la Assembly. El flujo de trabajo de imágenes puede normalizar los píxeles y eliminar los metadatos incrustados, pero la aplicación debe decidir si el tema, la titularidad y el contexto cumplen su política.
Mantén diferenciados estados como subido, en procesamiento, revisión requerida, aprobado, rechazado y exportación fallida. No marques un contenido como aprobado solo porque /image/resize y /backblaze/store se completaron correctamente, y no conviertas un error de procesamiento en un rechazo de moderación. Cada estado necesita su propio comportamiento de reintento, revisión y retención.
Construye el Template versionado de imágenes de Backblaze
El Template acepta una única subida acotada, crea un derivado WebP que se ajusta a las dimensiones elegidas, elimina los metadatos incrustados de la imagen y exporta solo ese derivado. zoom es false, por lo que un origen más pequeño se mantiene más pequeño. La ruta de destino contiene una etiqueta de versión y assembly.id, de modo que cada Assembly genera una ruta sin colisiones en lugar de sobrescribir una imagen revisada previamente.
La aplicación proporciona un asset_id validado, pero no elige la credencial, el bucket, un prefijo arbitrario ni los parámetros de Robot. Mantén allow_steps_override en false y usa los límites de auth del Template como límite final de la carga de trabajo. Conserva el original por separado cuando las apelaciones, el reprocesamiento o los requisitos legales necesiten evidencia de origen; strip afecta al derivado, no a un archivo de origen externo.
{
"allow_steps_override": false,
"auth": {
"max_number_of_files": 1,
"max_size": 26214400
},
"steps": {
":original": {
"robot": "/upload/handle"
},
"community_webp": {
"use": ":original",
"robot": "/image/resize",
"width": 2048,
"height": 2048,
"resize_strategy": "fit",
"zoom": false,
"format": "webp",
"quality": 80,
"strip": true
},
"backblaze_versioned": {
"use": "community_webp",
"robot": "/backblaze/store",
"credentials": "backblaze-community-images",
"path": "community/web-v1/${fields.asset_id}/${assembly.id}/${file.url_name}",
"headers": {
"X-Bz-Info-workflow": "community-web-v1"
},
"result": true
}
}
}Restringe la clave de aplicación de Backblaze
Crea una clave de aplicación estándar en lugar de usar la clave maestra. Restríngela al bucket de destino y a un prefijo de salida estable, como community/web-v1/, que cubra todas las rutas que genera el Template. Nuestra documentación del Robot de almacenamiento de Backblaze exige listBuckets, writeFiles y listFiles para que el Robot pueda resolver el bucket y subir el objeto.
Una restricción de prefijo y las rutas de destino únicas reducen el impacto si la credencial queda expuesta, pero no autorizan a un usuario de la aplicación ni moderan el contenido. Guarda el bucket, el ID de la clave de aplicación y la clave de aplicación en credenciales de Template con nombre. Rota o revoca esa credencial de forma independiente de las sesiones de inicio de sesión de la aplicación y prueba la de reemplazo antes de eliminar la clave anterior.
Límite del bucket
La clave no puede operar sobre buckets no relacionados.
Límite del prefijo
La clave se limita a los objetos que están bajo el espacio de nombres de los derivados.
Límite de la aplicación
El producto sigue siendo quien decide qué inquilino y qué recurso pueden invocar el Template.
Usa las rutas y la información de archivo de forma deliberada
Los nombres de objeto de Backblaze B2 forman un espacio de nombres plano, aunque las herramientas presenten como carpetas los prefijos separados por barras. Usa esos prefijos para organizar y restringir las claves, no como prueba de que existen directorios superiores. Incluye en la ruta una versión del flujo de trabajo y un identificador de aplicación acotado, y usa assembly.id para evitar colisiones de nombres.
/backblaze/store acepta cabeceras con valores de cadena, incluida la información de archivo X-Bz-Info-*. Usa etiquetas estables, como la versión del flujo de trabajo del derivado. No incluyas datos privados de los usuarios, secretos ni un nombre de archivo original sin límite. El Robot rechaza un nombre de archivo generado que supere los 1.024 bytes UTF-8, así que cada campo de la aplicación que entre en la ruta debe tener un contrato de longitud y de caracteres.
Prueba el modelo de fallos del derivado y del destino
Pon a prueba la orientación, la transparencia, la animación, los perfiles de color, las dimensiones grandes, los archivos con formato incorrecto, los envíos duplicados, las claves de aplicación no válidas, una clave restringida al prefijo equivocado y un bucket no disponible. Revisa la apariencia, el formato, las dimensiones, los bytes, la eliminación de metadatos, la ruta del objeto y la información del archivo en lugar de conformarte con una Assembly en verde.
Haz seguimiento de los fallos por recepción, procesamiento, autenticación, búsqueda del bucket y subida. Un tiempo de espera agotado incierto debería pasar a conciliación, porque puede que el objeto ya exista. Revisa la Assembly original y el registro de la operación antes de crear una nueva ruta versionada; de lo contrario, el producto puede acumular varios derivados aparentemente aprobados para una misma fuente.
Mantén las URL de almacenamiento separadas de la autorización de entrega
Una URL de resultado identifica lo que devolvió el Step de almacenamiento; no es la política de inquilinos ni de moderación de la aplicación. Mantén el objeto no disponible para los consumidores del producto hasta que la aplicación lo concilie con la operación esperada y haga avanzar el estado de moderación. Entrega mediante la configuración de bucket y de CDN elegida para el producto, con la autorización aplicada en ese límite.
Conserva el bucket duradero y el nombre del objeto, la versión del flujo de trabajo, el ID de la Assembly, la identidad de la fuente y la decisión de moderación. Elimina los derivados rechazados o sustituidos mediante un proceso de retención independiente que entienda las versiones de archivo de Backblaze y los requisitos de auditoría del producto. El Template de procesamiento no debería tomar esa decisión destructiva.
Detalles técnicos que conviene conocer
- /backblaze/store requiere los valores de bucket, ID de clave de aplicación y clave de aplicación, que pueden proporcionarse mediante credenciales de Template con nombre.
- La documentación de /backblaze/store indica que el bucket necesita el permiso listBuckets para resolver su ID, además de writeFiles y listFiles.
- Las claves de aplicación estándar de Backblaze se pueden restringir a un bucket y a un prefijo de nombre de archivo; el prefijo debe cubrir la ruta que genera el Template.
- /backblaze/store acepta una ruta con Assembly Variables y un objeto headers con valores de tipo cadena. Las cabeceras X-Bz-Info-* se convierten en información de archivo de Backblaze.
- Los nombres de objeto de Backblaze B2 son cadenas planas; las carpetas delimitadas por barras son prefijos que las herramientas y las interfaces presentan como una jerarquía.
- El Robot rechaza los nombres de archivo de Backblaze generados que superen los 1.024 bytes UTF-8; el límite cuenta bytes codificados, no caracteres.
Un enfoque práctico
- 1
Define los límites de subida, los estados de moderación, el formato de destino, la política de metadatos y un prefijo de destino estable.
- 2
Crea una clave de aplicación de Backblaze restringida por prefijo y guárdala como credenciales de Template con nombre.
- 3
Procesa una selección representativa de imágenes de prueba: móviles, transparentes, animadas, con formato incorrecto y con muchos metadatos.
- 4
Guarda de forma persistente la identidad del objeto en B2 antes de cambiar el estado de la aplicación y reintenta por operación, no por nombre de archivo.
Cuándo resulta útil Transloadit
Usa /upload/handle para un único candidato de recepción moderada, /image/resize para un WebP acotado y sin metadatos, y /backblaze/store para una ruta versionada única. Usa una clave de aplicación estándar de B2 restringida al bucket de destino y a un prefijo de salida estable, y coloca metadatos estables del flujo de trabajo en las cabeceras X-Bz-Info-*.
Límite de la arquitectura
Transloadit acepta una imagen de la comunidad, crea la variante eficiente en almacenamiento y la escribe en un bucket de Backblaze B2. La aplicación sigue siendo responsable de la moderación, la pertenencia al inquilino, los registros de origen duraderos, la política del bucket, la autorización de entrega y la eliminación.
Preguntas frecuentes
¿La eliminación de metadatos modera la imagen?
No. Elimina los metadatos incrustados del derivado. La política de contenido, la pertenencia y la revisión contextual siguen siendo responsabilidades de la aplicación.
¿Debería el flujo de trabajo usar una clave de aplicación maestra de Backblaze?
No. Usa una clave estándar restringida al bucket de destino y a un prefijo de derivados que abarque todas las rutas generadas, con las capacidades que requiere el Robot.
¿Las rutas separadas por barras son carpetas reales de B2?
No. B2 almacena nombres de objeto planos. Las interfaces pueden presentar los prefijos compartidos como carpetas, lo que resulta útil para la organización y la restricción de acceso.
¿Las cabeceras X-Bz-Info pueden contener datos de usuario?
Evítalo. Usa etiquetas operativas acotadas y no sensibles, y mantén los datos privados de usuario o de moderación en la base de datos de la aplicación.
¿Por qué no sobrescribir el derivado anterior?
Las rutas únicas con versión facilitan conciliar los reintentos, la evidencia de moderación, la reversión y el comportamiento de la caché. Combínalas con una comprobación de deduplicación en la aplicación y, más adelante, elimina las versiones sustituidas conforme a una política de retención explícita.