Conclusiones clave
- Usa una Assembly para recibir una subida, validarla, crear salidas fijas y exportar los originales o derivados seleccionados a S3.
- Usa Templates independientes solo para subida, para imágenes y para video, de modo que cada tipo de medio aceptado tenga un contrato explícito de procesamiento y fallos.
- Usa Smart CDN para importar un objeto existente de S3 mediante un Template guardado, transformarlo cuando falle la caché y almacenar en caché el resultado servido.
Una solicitud de «subida de archivos, optimización de imágenes, codificación de video y nuestro propio bucket de S3» esconde varios contratos. Una subida puede almacenarse sin cambios, una imagen puede optimizarse antes de exportarse, o un video puede codificarse en una variante ya probada. Algunos tamaños o formatos de imagen resultan más económicos de crear solo cuando un navegador los solicita. Transloadit admite cada ruta, pero tienen límites distintos de almacenamiento, latencia, caché y seguridad.
Lo más importante
- Mantén las credenciales de AWS en credenciales de Template acotadas y genera la autorización de subida o de Smart CDN en un servidor de confianza.
- Trata S3 como el sistema de registro persistente, no como prueba de que los bytes del archivo nunca pasan por la infraestructura de procesamiento y caché de Transloadit.
- Preprocesa las salidas que deben existir antes de la publicación; usa variantes acotadas bajo demanda cuando la demanda de derivados sea impredecible.
- Almacena originales, derivados fijos o ambos según los requisitos de recuperación y migración de la aplicación.
Separa el trabajo en el momento de la subida del trabajo en el momento de la solicitud
Empieza con dos rutas en lugar de un vago «pipeline de optimización». En la ruta del momento de la subida, un navegador envía un archivo mediante Uppy y el protocolo tus a una Assembly de Transloadit. El Template guardado valida el archivo observado, crea las salidas que deban existir de inmediato y exporta los archivos seleccionados a S3. La aplicación almacena el ID de la Assembly y la identidad persistente del objeto en S3 junto con su registro del recurso.
En la ruta del momento de la solicitud, un navegador solicita una URL de Smart CDN. La URL identifica un Template guardado y una ruta de entrada en S3. En caso de fallo de caché, Transloadit importa ese objeto, aplica el Template con las Assembly Variables permitidas y entrega un resultado a través de /file/serve. La capa de entrega almacena en caché la respuesta; una solicitud en caliente puede reutilizar el derivado sin volver a ejecutar la transformación.
Ruta del momento de la subida
Navegador → Uppy/tus → Assembly → validación y transformaciones fijas → S3 del cliente.
Ruta del momento de la solicitud
Navegador → URL de Smart CDN → fallo de caché → importación desde S3 y transformación → caché de borde → navegador.
Límite de propiedad
El S3 del cliente aloja los objetos persistentes de la aplicación; los archivos temporales de procesamiento y los derivados en caché tienen contratos de retención independientes.
Almacena un archivo subido en S3 sin transformarlo
Usa un Template solo de subida cuando Transloadit deba recibir y exportar el archivo aceptado sin cambiar sus bytes multimedia. /upload/handle recibe la entrada y /s3/store selecciona :original. La ruta de destino usa Assembly Variables para que las subidas simultáneas no se sobrescriban entre sí, mientras el nombre de archivo original apto para URL sigue siendo reconocible.
El ejemplo hace referencia a credenciales de Template y establece acl: "private" porque /s3/store usa public-read de forma predeterminada. Establece bucket_region según la región de AWS real del bucket para evitar una búsqueda de GetBucketLocation y elimina s3:GetBucketLocation de la política de IAM de las credenciales. Trata un objeto público como una decisión explícita del producto y confirma el acceso efectivo a S3 por separado de la configuración del Robot.
{
"allow_steps_override": false,
"steps": {
":original": { "robot": "/upload/handle" },
"stored": {
"use": ":original",
"robot": "/s3/store",
"credentials": "my_s3_credentials",
"bucket_region": "us-east-1",
"acl": "private",
"path": "uploads/${unique_prefix}/${file.url_name}"
}
}
}Recibe, valida, optimiza y exporta la subida
Usa un Template de imagen guardado para limitar lo que el código del navegador puede solicitar. /upload/handle recibe el archivo, /file/filter puede rechazar archivos cuyas propiedades detectadas no cumplan la política, /image/resize crea un derivado WebP fijo, y /image/optimize reduce esa salida. /s3/store exporta entonces exactamente los Steps indicados por su valor use. Apúntalo solo a optimized para guardar el derivado, solo a accepted_images para guardar el original aceptado, o a ambos para conservar los dos objetos. preserve_meta_data se deja deliberadamente en su valor predeterminado true para conservar los metadatos de la imagen, como la información de derechos de autor del fotógrafo, aceptando un pequeño aumento de tamaño incluso bajo la prioridad compression-ratio.
Uppy es la capa de subida del navegador, no el límite de autorización. Deja que el plugin de Transloadit solicite al servidor de la aplicación parámetros de Assembly firmados y de corta duración. Mantén allow_steps_override deshabilitado cuando el navegador no deba reemplazar los Steps guardados ni seleccionar otro destino. Reutiliza la ACL privada y la región real del bucket de AWS establecidas en el ejemplo solo de subida. Tanto ${file.id} como ${unique_prefix} son únicos por archivo exportado; este ejemplo de imagen usa el ${file.id} sin barras para que el segmento intermedio de la ruta siga siendo un solo componente, generando claves predecibles images/${file.id}/${file.url_name} que Smart CDN puede referenciar, mientras que los ejemplos de subida y de video usan ${unique_prefix} como directorio que evita colisiones. Como ${file.id} es único para cada archivo exportado, accepted_images y optimized resuelven a claves diferentes bajo images/; la plantilla de ruta compartida no sobrescribe, así que registra cada clave exportada por separado en el estado de la aplicación. Considera la subida completa para el producto solo después de que la aplicación haya conciliado el resultado de la Assembly y las claves persistentes de S3.
{
"allow_steps_override": false,
"steps": {
":original": { "robot": "/upload/handle" },
"accepted_images": {
"use": ":original",
"robot": "/file/filter",
"accepts": [["${file.mime}", "regex", "^(image/jpeg|image/png|image/gif|image/webp|image/avif)$"]],
"error_on_decline": true
},
"resized": {
"use": "accepted_images",
"robot": "/image/resize",
"resize_strategy": "fit",
"width": 1600,
"height": 1600,
"format": "webp"
},
"optimized": {
"use": "resized",
"robot": "/image/optimize",
"priority": "compression-ratio",
"preserve_meta_data": true
},
"stored": {
"use": ["accepted_images", "optimized"],
"robot": "/s3/store",
"credentials": "my_s3_credentials",
"bucket_region": "us-east-1",
"acl": "private",
"path": "images/${file.id}/${file.url_name}"
}
}
}Codifica un video antes de almacenarlo en S3
Usa un Template solo de video cuando el objeto persistente en S3 deba ser una variante de reproducción y no la fuente subida. /video/encode lee :original y aplica un ajuste preestablecido ya probado. web/mp4/720p es un punto de partida concreto de MP4 de 1280×720, no una recomendación universal; valida las dimensiones de la fuente, la tasa de fotogramas, el audio, los subtítulos, la calidad, la compatibilidad con dispositivos, el tiempo de procesamiento y el costo según el contrato de reproducción del producto.
El ejemplo exporta el Step encoded y deja la fuente fuera de esa operación de almacenamiento. Añade un segundo Step /s3/store cuando la fuente deba permanecer disponible para una recodificación de mayor calidad, una auditoría o una migración. La codificación puede prolongarse más allá de una solicitud de la aplicación, así que concilia el Assembly Status o un callback de finalización verificado antes de tratar la clave de S3 como publicable.
{
"allow_steps_override": false,
"steps": {
":original": { "robot": "/upload/handle" },
"encoded": {
"use": ":original",
"robot": "/video/encode",
"preset": "web/mp4/720p"
},
"stored": {
"use": "encoded",
"robot": "/s3/store",
"credentials": "my_s3_credentials",
"bucket_region": "us-east-1",
"acl": "private",
"path": "videos/${unique_prefix}/${file.url_name}"
}
}
}Transforma un original de S3 bajo demanda mediante Smart CDN
Una integración de Smart CDN sigue empezando con un Template guardado. /s3/import resuelve la ruta de entrada usando credenciales de Template acotadas, /image/resize lee el valor ${fields.w} proporcionado en la URL y el valor ${browser.wanted_image_format} negociado en la solicitud, y /file/serve selecciona la respuesta. En esta ruta, el borde de Smart CDN de Transloadit deriva un encabezado x-tl-image-format de confianza y previamente normalizado a partir del encabezado Accept del cliente. El encabezado se escribe del lado del servidor y no puede ser controlado por el cliente; los desarrolladores solo hacen referencia a ${browser.wanted_image_format} en las Instructions, que se resuelve en el mismo valor avif, webp o jpg.
Una URL como https://my-workspace.tlcdn.com/responsive-image/images/a8d3eeeb67479f11f8b091b04f6181ad/canoe.jpg?w=640 proporciona images/a8d3eeeb67479f11f8b091b04f6181ad/canoe.jpg como el ${fields.input} implícito (la ruta después del nombre del Template, sin barra inicial) y 640 como ${fields.w}. Esa entrada es la clave images/${file.id}/${file.url_name} registrada para el original persistente accepted_images, que /s3/import lee para el redimensionamiento bajo demanda. El derivado optimizado es un objeto independiente bajo su propio prefijo ${file.id}. Como las dos salidas no comparten directorio, registra cada clave exportada en el estado de la aplicación en lugar de derivar una única clave a partir de la otra o de la URL de la solicitud.
Conserva el prefijo images/ completo en la URL de Smart CDN; no lo añadas de nuevo en el Template. Los valores de la consulta de Smart CDN llegan como cadenas de texto, por lo que la lista de anchos permitidos se compara con los literales de cadena "320" y "640"; un ancho no coincidente recurre a 1280. Mantener separados el mapeo de rutas y la lista de transformaciones permitidas facilita auditar qué objeto de S3 puede leerse y qué variante puede solicitarse.
No interpoles una ruta, un ancho, una calidad o un formato sin restricciones solo porque puedan llegar como un campo. Restringe la credencial de S3 a un prefijo previsto, haz que la aplicación de confianza busque la clave exportada en su registro de recursos y firma una URL que contenga esa clave exacta. La ruta del momento de la solicitud selecciona este Template guardado mediante su URL de Smart CDN en lugar de aceptar Assembly Instructions enviadas por el navegador, por lo que este ejemplo no usa el ajuste allow_steps_override de la subida. Usa la región real del bucket de AWS, como en el ejemplo solo de subida. Valida o asigna los valores de transformación en el Template. Las búsquedas simples como ${fields.input} son gratuitas, mientras que las comparaciones, operaciones aritméticas y expresiones ternarias son Dynamic Evaluation compleja: las ternarias de ancho y formato de este ejemplo invocan /script/run y se facturan en cada fallo de caché. La expresión de formato asigna el valor de respaldo jpg a null, de modo que las solicitudes sin preferencia por un formato moderno conserven el formato original en lugar de aplanar la transparencia o la animación mediante una recodificación innecesaria. Consulta la entrada ${browser.wanted_image_format} en la referencia de Assembly Variables. Mide la primera transformación sin caché por separado de la entrega en caché posterior.
{
"steps": {
"imported": {
"robot": "/s3/import",
"credentials": "my_s3_credentials",
"bucket_region": "us-east-1",
"path": "${fields.input}"
},
"resized": {
"use": "imported",
"robot": "/image/resize",
"resize_strategy": "fit",
"width": "${fields.w === '320' ? 320 : fields.w === '640' ? 640 : 1280}",
"format": "${browser.wanted_image_format === 'jpg' ? null : browser.wanted_image_format}"
},
"served": {
"use": "resized",
"robot": "/file/serve",
"cache_duration": 604800
}
}
}Decide qué almacenar de forma permanente y qué generar bajo demanda
Mantener un original en S3 aporta una fuente estable para reprocesar, pero no exige almacenar cada variante responsiva. Exporta las salidas canónicas que el producto necesite con independencia de la caché: el archivo maestro aprobado, una imagen de anuncio para el mercado, un recurso de impresión o un derivado inmutable de lanzamiento. Deja que Smart CDN cree variantes de presentación acotadas cuyas dimensiones dependan del dispositivo o diseño solicitante.
Por el contrario, no dependas únicamente de una ruta bajo demanda cuando la primera solicitud no pueda tolerar la latencia de procesamiento, un editor deba aprobar los píxeles exactos o los sistemas posteriores requieran un objeto persistente antes de la publicación. En ese caso, crea y exporta el derivado en la Assembly del momento de la subida. La misma aplicación puede usar ambos enfoques para distintas clases de salida sin cambiar quién conserva el origen de forma persistente.
Originales persistentes
Conserva las fuentes necesarias para futuras transformaciones, recuperación, auditoría o migración.
Derivados fijos
Almacena las salidas que deben revisarse, ser referenciadas por otros sistemas o estar disponibles sin una transformación en frío.
Derivados bajo demanda
Almacena en caché variantes de presentación seguras cuyas combinaciones son limitadas pero difíciles de predecir antes de que un usuario las solicite.
Protege la aplicación, el bucket y la superficie de transformación
Crea credenciales de Template independientes con privilegios mínimos cuando las exportaciones de subida y las importaciones de Smart CDN necesiten acciones o prefijos distintos de AWS. Mantén las claves de AWS en bruto, el Auth Secret de Transloadit y las Instructions sin restricciones fuera de los paquetes del navegador. El servidor de la aplicación debe autorizar al usuario, seleccionar el Template y emitir únicamente los parámetros de subida de corta duración o la URL firmada de Smart CDN adecuados para ese recurso.
Una subida exitosa o una firma válida no es una aprobación de publicación. Valida el tipo MIME detectado y el tamaño en la Assembly, asocia los callbacks de forma idempotente con el inquilino y la Assembly esperados, y expone un resultado solo después de que el objeto persistente y el registro de la aplicación coincidan. Para Smart CDN, diseña el versionado de la fuente, el vencimiento de la URL, la duración de la caché y la eliminación en conjunto, de modo que reemplazar una clave de S3 no pueda dejar activa una dirección de derivado no deseada.
Compara con un pipeline nativo de AWS
Un diseño nativo puede subir archivos mediante una URL prefirmada de S3, reaccionar a eventos de creación de objetos, procesarlos con Lambda u otro servicio de cómputo, almacenar derivados y entregarlos a través de una CDN. Eso puede ser una buena opción cuando la carga de trabajo se mantiene dentro de los límites de tiempo de ejecución admitidos y el equipo quiere operar por sí mismo la autorización, los reintentos, las colas, los códecs, la concurrencia, la observabilidad y la recuperación ante fallos.
Compara rutas completas de producción en lugar de un único cambio de tamaño exitoso. Prueba subidas interrumpidas, fuentes grandes, imágenes con formato incorrecto, orientación y color, eventos duplicados, exportaciones parciales, picos de concurrencia, transformaciones en frío, invalidación de caché, latencia regional y eliminación. Incluye el tiempo de ingeniería y operaciones junto con los costos de subida, procesamiento, almacenamiento, solicitudes y salida de datos. La elección relevante es qué responsabilidades operativas quiere asumir el equipo.
Detalles técnicos que conviene conocer
- El plugin de Transloadit para Uppy crea una Assembly y sube los archivos a su endpoint del protocolo tus, mientras que el código de la aplicación puede solicitar parámetros de Assembly firmados a un back end confiable.
- Un Template de Assembly puede conectar
/upload/handle, Steps de validación o transformación, y/s3/store; las relacionesusedeterminan si se exporta el original, los derivados o ambos. /image/optimizepuede reducir los archivos de imagen compatibles antes de/s3/store, mientras que los tipos de imagen no compatibles pasan sin cambios./video/encodeacepta ajustes preestablecidos comoweb/mp4/720p; el Step codificado puede exportarse a S3 independientemente de la fuente subida.- Las credenciales de Template almacenan el acceso a AWS por separado de las Assembly Instructions y se referencian por nombre desde los Templates guardados.
- Proporcionar
bucket_regionevita la búsqueda deGetBucketLocationy permite que la política de IAM de las credenciales de Template omitas3:GetBucketLocation. - Una URL de Smart CDN identifica un Workspace, un Template, una ruta de entrada y campos de URL opcionales. La ruta de entrada está disponible para el Template como
${fields.input}. Ante un fallo de caché, el Template se ejecuta y/file/serveentrega la respuesta que la capa de entrega almacena en caché. - Un Template de Smart CDN puede usar
/s3/importpara leer un objeto del S3 propiedad del cliente,/image/resizepara transformarlo y/file/servepara devolver el derivado seleccionado. - En las solicitudes de Smart CDN, los parámetros de consulta de la URL completan
${fields.*}, mientras que la ruta después del nombre del Template se convierte en el valor implícito${fields.input}. Esto difiere de los campos de formulario del momento de la subida y de la clavefieldsde la Assembly. El Template decide qué valores lee, pero cada uno necesita igualmente validación, mapeo o autorización mediante una URL firmada. - El almacenamiento temporal de resultados de Transloadit no es almacenamiento permanente de la aplicación. Los resultados se conservan durante al menos 24 horas independientemente de la configuración; el almacenamiento actual en R2 no admite su eliminación antes de ese plazo. Los flujos de trabajo de producción deben exportar todo objeto que deba persistir.
- Un derivado en caché de Smart CDN es independiente del original persistente en S3. El reemplazo de la fuente, el versionado de URL, el vencimiento de la firma y la duración de la caché deben diseñarse juntos.
Un enfoque práctico
- 1
Traza las rutas de subida, procesamiento, almacenamiento y entrega, incluyendo quién posee cada objeto persistente y cada URL pública.
- 2
Crea credenciales de Template con privilegios mínimos y Templates guardados para el trabajo en el momento de la subida y bajo demanda.
- 3
Prueba las exportaciones fijas, los fallos de caché en frío de Smart CDN, los aciertos de caché en caliente, los parámetros inválidos, las fuentes reemplazadas y los orígenes no disponibles.
- 4
Registra los ID de las Assemblies y las versiones estables de los objetos de S3 en la aplicación, y luego supervisa por separado los costos de procesamiento, exportación, caché y entrega.
Cuándo resulta útil Transloadit
Usa Transloadit cuando un producto necesite subidas mediante Uppy y el protocolo tus, flujos de trabajo asíncronos de imagen o video, exportaciones a su propio bucket de S3 y variantes opcionales de imagen controladas por URL a través de Smart CDN. Usa solo las partes que la aplicación necesite: una Assembly puede conservar una subida, preprocesar y exportar recursos fijos, mientras que un Template de Smart CDN puede importar un original de imagen desde S3 y crear un derivado acotado —restringido a una lista explícita de valores permitidos— bajo demanda.
Límite de la arquitectura
Tu aplicación es responsable de la autorización de usuarios, los registros de recursos, la política de publicación y las copias persistentes en S3. Transloadit recibe o importa archivos, retiene temporalmente los datos mientras los procesa, ejecuta el flujo de trabajo guardado, exporta los resultados seleccionados y puede almacenar en caché derivados de Smart CDN. Por lo tanto, un almacenamiento propiedad del cliente no significa que los bytes permanezcan exclusivamente dentro de la cuenta de AWS del cliente.
Preguntas frecuentes
¿Usar mi propio bucket de S3 mantiene cada byte dentro de mi cuenta de AWS?
No. S3 puede seguir siendo el sistema de registro persistente, pero las subidas, los originales importados, los resultados temporales y los derivados de Smart CDN pasan por la infraestructura de Transloadit según el flujo de trabajo configurado. Los resultados temporales se conservan durante al menos 24 horas independientemente de la configuración, y el almacenamiento actual en R2 no permite eliminarlos antes. La retención del Assembly Status JSON se configura por separado, con opciones que van desde No Save hasta 90 días; 90 días es el valor predeterminado. Conservar el Status JSON durante 90 días no convierte los archivos de resultados temporales en almacenamiento persistente. Smart CDN almacena en caché los resultados servidos por separado.
¿Debo almacenar la imagen original, los derivados procesados o ambos?
Exporta el original cuando se necesite para reprocesamiento, auditoría o migración de proveedor. Exporta derivados fijos cuando deban existir antes de la publicación o revisarse. Puedes exportar ambos dando a /s3/store los dos Steps como su entrada use.
¿Puede un Template de S3 gestionar imágenes y videos?
Usa Templates guardados independientes cuando las imágenes y los videos tengan políticas distintas de validación, tiempo de espera, publicación o fallos. Un Template deliberadamente mixto puede bifurcarse con /file/filter, pero cada rama debería definir qué ocurre cuando rechaza un archivo y qué salidas exporta /s3/store.
¿Es Smart CDN un sistema de procesamiento independiente de las Assemblies?
No. Una Assembly del momento de la subida y una solicitud de Smart CDN usan el mismo modelo de ejecución de Template y Robot, aunque cada ruta define su propio Template. La ruta de la subida se ejecuta cuando llegan los bytes y puede exportar resultados persistentes. La ruta de Smart CDN ejecuta su Template ante un fallo de caché y entrega un único resultado seleccionado mediante /file/serve.
¿Cuándo debo preprocesar en lugar de transformar bajo demanda?
Preprocesa los recursos que necesiten aprobación, disponibilidad determinista, varios resultados persistentes o una latencia predecible en la primera visualización. Transforma bajo demanda cuando los tamaños solicitados sean difíciles de predecir y un conjunto acotado de variables de URL pueda expresar las variantes seguras. Muchas aplicaciones preprocesan una imagen canónica y crean tamaños de presentación bajo demanda.
¿Cómo debe recibir Transloadit acceso a un bucket privado de S3?
Almacena las credenciales de AWS como credenciales de Template con privilegios mínimos, haz referencia a su nombre desde un Template guardado e impide que los navegadores proporcionen Assembly Instructions o destinos de almacenamiento arbitrarios. Firma los parámetros de subida y las URL protegidas de Smart CDN en un servidor de confianza.
¿Tengo que usar Transloadit para usar Uppy?
No. Uppy es software de subida de código abierto y puede usar muchos back ends. El plugin mantenido de Transloadit es la integración directa cuando las subidas deben crear una Assembly, usar transferencia mediante el protocolo tus e informar el progreso o los resultados del procesamiento.