Exportar archivos a Amazon S3
🤖/s3/store exporta resultados de encoding a Amazon S3.

Si es la primera vez que usas Amazon S3, consulta nuestro tutorial sobre cómo usar tu propio bucket de S3.
La URL del archivo resultante en tu bucket de S3 se devolverá en el Assembly Status JSON. Que se devuelva una URL no hace público un objeto privado ni concede acceso de lectura. Si tu bucket de S3 tiene habilitado el control de versiones, el ID de versión del archivo se devolverá en meta.version_id.
Configurar explícitamente los buckets privados. El valor predeterminado de acl del Robot sigue siendo "public-read". Para un bucket privado, establece acl: "bucket-default" y no proporciones encabezados de ACL ni de concesión. Así se omite el encabezado de ACL generado y funciona con la opción Bucket owner enforced de Object Ownership, en la que las ACL están deshabilitadas. Mantén habilitado S3 Block Public Access. Establecer acl: "private" sigue enviando una ACL y no equivale a omitirla.
Usar nombres de bucket compatibles con DNS. Sigue las reglas de nomenclatura de buckets de AWS. El parámetro url_prefix cambia las URL devueltas; no cambia el bucket ni sus permisos de acceso.
Limitar el acceso
Usa una identidad de AWS dedicada con acceso limitado al bucket de destino y al prefijo de objeto. No uses claves de acceso raíz de AWS. Guarda su ID de clave de acceso, su clave de acceso secreta, el nombre del bucket y la región como key, secret, bucket y bucket_region en credenciales de Template y luego haz referencia al nombre de esas credenciales con credentials. Como alternativa, las integraciones de backend de confianza pueden proporcionar esos parámetros directamente; no expongas secretos de AWS en las instrucciones del navegador.
La siguiente es una política de IAM basada en identidades, asociada a esa identidad dedicada, no una política de bucket. Intencionadamente no incluye Principal. Reemplaza {BUCKET_NAME} y usa en el Robot un valor de path que empiece por uploads/, o adapta conjuntamente el prefijo de la política y la ruta.
Este ejemplo cubre las subidas y la limpieza de subidas multiparte fallidas con un valor explícito de bucket_region, acl: "bucket-default", sin encabezados de ACL/concesión, sin etiquetas y con cifrado administrado por S3 (SSE-S3). Las políticas de bucket existentes, los controles de la organización o las políticas de endpoint pueden seguir denegando el acceso.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "UploadAndAbortWithinPrefix",
"Effect": "Allow",
"Action": ["s3:PutObject", "s3:AbortMultipartUpload"],
"Resource": "arn:aws:s3:::{BUCKET_NAME}/uploads/*"
}
]
}
El componente de subida usa PutObject o bien CreateMultipartUpload, UploadPart y CompleteMultipartUpload; las subidas multiparte fallidas pueden activar AbortMultipartUpload. AWS asocia las operaciones de subida exitosas con s3:PutObject. El acceso de escritura puede sobrescribir una clave de objeto existente; no se limita a agregar objetos nuevos. Elige rutas de objeto únicas y considera habilitar el control de versiones para poder recuperar datos.
Agrega permisos solo para las funciones que uses, según la referencia de permisos por operación de AWS:
- Sin un valor explícito de
bucket_region, el descubrimiento de la región puede requerirs3:GetBucketLocationy, como alternativa,s3:ListBucketsobre el ARN del bucket,arn:aws:s3:::{BUCKET_NAME}, sin sufijo de objeto. Proporcionar la región correcta evita estas solicitudes de descubrimiento. - Los encabezados de ACL o de concesión requieren
s3:PutObjectAcl; las etiquetas requierens3:PutObjectTaggingsobre el prefijo de objeto permitido.bucket-defaultno elimina los encabezados de ACL/concesión que proporciones enheaders. - Descargar resultados privados requiere una autorización de lectura independiente. Incluso una URL generada con
sign_urls_fornecesita que la identidad firmante tenga los permisos de lectura adecuados.
S3 aplica su configuración de cifrado de bucket cuando no se envía ninguna anulación del cifrado. Puedes solicitar SSE-KMS mediante headers, usando x-amz-server-side-encryption: aws:kms y x-amz-server-side-encryption-aws-kms-key-id. Cuando el cifrado predeterminado del bucket o los encabezados de la solicitud seleccionan SSE-KMS, la identidad que realiza la subida necesita kms:GenerateDataKey sobre la clave correspondiente, además de kms:Decrypt para las subidas multiparte. En el caso de una clave administrada por el cliente, concede estos permisos con una política de clave de KMS compatible; la política base de S3 anterior no los incluye. No agregues concesiones generales de kms:* ni de sts:*.
Las credenciales de AWS de corta duración son un conjunto coincidente de key, secret y session_token. Haz que un backend de confianza obtenga y renueve los tres valores, y que luego los proporcione juntos cuando cree la Assembly. Puede pasarlos directamente en las instrucciones del Robot o guardarlos y actualizarlos juntos mediante la API de credenciales de Template. Mantén los tres fuera de las instrucciones del navegador; reemplazar solo el token de sesión no renueva las claves de acceso caducadas. Este Robot pasa a S3 las credenciales proporcionadas; no asume un rol ni renueva las credenciales caducadas. Asegúrate de que las credenciales temporales sigan siendo válidas durante toda la subida.
Ejemplo de uso
Exporta archivos subidos a my_target_folder en un bucket de S3:
{
"steps": {
"exported": {
"credentials": "YOUR_AWS_CREDENTIALS",
"path": "my_target_folder/${unique_prefix}/${file.url_name}",
"robot": "/s3/store",
"use": ":original"
}
}
}Parámetros
interpolateboolean | Record<string, boolean>Controla si las Assembly Variables se interpolan en campos de instrucciones individuales.
De forma predeterminada, la mayoría de los campos de instrucciones de los Robots interpolan Assembly Variables. Establece esta opción en
falsepara tratar todos los campos de instrucciones como texto literal, o establece la ruta de un campo individual enfalsepara tratar únicamente ese campo como texto literal. En el caso de los campos específicos de un Robot que son literales de forma predeterminada, establece esta opción entrueo la ruta de ese campo entruepara volver a habilitar la interpolación.Usa nombres de campos como
patho rutas con puntos comoffmpeg.vfpara los objetos anidados.output_metaRecord<string, boolean> | boolean | Array<string>Te permite especificar un conjunto de metadatos cuyo cálculo requiere más recursos de CPU y que, por lo tanto, está desactivado de forma predeterminada para mantener el procesamiento de tus Assemblies rápido.
Para imágenes, puedes añadir
"has_transparency": trueen este objeto para extraer si la imagen contiene partes transparentes y"dominant_colors": truepara extraer un array de códigos de color hexadecimales de la imagen.Para imágenes, también puedes añadir
"blurhash": truepara extraer una cadena BlurHash, una representación compacta de un marcador de posición para la imagen que resulta útil para mostrar una vista previa desenfocada mientras se carga la imagen completa.Para imágenes,
"thumbhash": trueextrae en su lugar un ThumbHash codificado en base64 enmeta.thumbhash, junto conmeta.has_alpha(si existe un canal alfa, incluso cuando es totalmente opaco). Describe píxeles orientados según EXIF y usa el primer fotograma en el caso de imágenes animadas. La extracción se realiza según el mejor esfuerzo posible: las imágenes de más de 40 megapíxeles, los formatos no compatibles o una decodificación fallida o limitada no generan ningún marcador de posición. Una extracción exitosa añade un cargo de metadatos equivalente al 20 % de los bytes de ese archivo. No se aplica ningún recargo por ThumbHash cuando está desactivado o cuando no se genera ningún hash.Configura esta opción en el Step que genera la imagen, como
/upload/handlepara los originales subidos o/image/resizepara las salidas procesadas. Configurarla únicamente en/transloadit/storeno solicita la extracción: el almacenamiento conserva los metadatos del origen. Transloadit Storage conserva un hash generado junto con su versión inmutable y lo devuelve en los resultados almacenados y en las lecturas nativas de activos. Las subidas directas a S3 no generan marcadores de posición. Un marcador de posición contiene información de la imagen, por lo que debes protegerlo con los mismos controles de acceso que la imagen completa.Para videos, puedes añadir el parámetro
"colorspace": truepara extraer el espacio de color del video de salida.Para videos, también puedes añadir
"interlaced": truepara detectar si el video está entrelazado. Esto combina el indicadorfield_orderde ffprobe, cuyo costo computacional es bajo, con una pasada de muestreo limitada medianteidetsobre los primeros fotogramas de la fuente, y exponeinterlaced,field_ordery un objeto de diagnósticointerlace_detectionenfile.meta. Esto requiere muchos recursos computacionales y se factura en consecuencia.Para audio, puedes añadir
"mean_volume": truepara obtener un único valor que represente el volumen promedio del archivo de audio.También puedes establecer esto en
falsepara omitir la extracción de metadatos y acelerar la transcodificación.user_metaRecord<string, any>(valor predeterminado:{})Añade metadatos JSON personalizados a cada archivo emitido sin modificar su contenido. Se admiten objetos y arrays anidados.
La herencia depende del Robot. Los valores se combinan con los
user_metaexistentes en el archivo de salida; el Step actual reemplaza las claves coincidentes de nivel superior. Asigna explícitamente las claves necesarias cuando un Robot cree nuevos archivos de salida.En los Steps de procesamiento,
${file.*}hace referencia a la primera entrada y${result.*}al archivo emitido. Los valores se evalúan para cada salida después de ejecutarse el Robot, antes de la posterior extracción de metadatos y del almacenamiento temporal. En:original, los valores se evalúan para cada subida antes de la extracción de metadatos.Los Steps posteriores leen
${file.user_meta.key}. Consulta Metadatos personalizados para ver un ejemplo completo y las reglas de herencia.resultboolean(valor predeterminado:false)Indica si los resultados de este Step deben aparecer en el Assembly Status JSON
queuebatchEstablecer la cola en «batch» reduce manualmente la prioridad de los Jobs de este Step para evitar consumir cupos prioritarios con Jobs que no necesitan un tiempo de espera cero en la cola
force_acceptboolean(valor predeterminado:false)Forzar a un Robot a aceptar un tipo de archivo que habría ignorado.
De forma predeterminada, los Robots ignoran los archivos que no reconocen. 🤖/video/encode, por ejemplo, ignorará sin problemas las imágenes de entrada.
Si configuras el parámetro
force_acceptcomotrue, puedes forzar a los Robots a aceptar todos los archivos que reciban. Esto normalmente provocará errores y solo debe usarse para depuración o para abordar casos extremos.ignore_errorsboolean | Array<meta | execute>(valor predeterminado:[])Ignorar errores durante fases específicas del procesamiento.
Establecer este parámetro en
["meta"]hará que el Robot ignore los errores durante la extracción de metadatos.Establecer este parámetro en
["execute"]hará que el Robot ignore los errores durante la fase principal de ejecución.Configurar este parámetro como
trueequivale a["meta", "execute"]y hará que se ignoren los errores en ambas fases.usestring | Array<string> | Array<object> | objectEspecifica qué Step o Steps se usarán como entrada.
- Puedes elegir cualquier nombre para los Steps, excepto
":original"(reservado para las subidas de usuarios gestionadas por Transloadit) - Puedes proporcionar varios Steps como entrada mediante arrays:
{ "use": [ ":original", "encoded", "resized" ] } - También puedes etiquetar los Steps de entrada con
aspara comunicar la intención semántica a los Robots:{ "use": [ { "name": ":original", "as": "image" }, { "name": ":original", "as": "mask" } ] }
ConsejoProbablemente eso sea todo lo que necesitas saber sobre
use, pero puedes consultar los casos de uso avanzados.- Puedes elegir cualquier nombre para los Steps, excepto
credentialsstringCrea las credenciales de Template asociadas en tu cuenta de Transloadit y usa el nombre de esas credenciales de Template como valor de este parámetro. Contendrán los valores de
bucket,key,secretybucket_regionpara S3.Aunque recomendamos usar siempre credenciales de Template, algunos casos de uso requieren credenciales dinámicas para las que resulta demasiado engorroso usar credenciales de Template debido a su naturaleza estática. Si tienes este requisito, puedes usar en su lugar los siguientes parámetros:
"bucket","bucket_region"(por ejemplo:"us-east-1"o"eu-west-2"),"key","secret".pathstring(valor predeterminado:"${unique_prefix}/${file.url_name}")La ruta donde se almacenará el archivo. Puede incluir cualquiera de las variables de Assembly disponibles. La ruta no debe ser un directorio.
url_prefixstring(valor predeterminado:"http://{bucket}.s3.amazonaws.com/")El prefijo de URL usado para la URL devuelta, como
"http://my.cdn.com/some/path/".aclauthenticated-read | aws-exec-read | bucket-default | bucket-owner-full-control | bucket-owner-read | private | public |(valor predeterminado:"public-read")La ACL usada para este archivo. Admite las ACL predefinidas para objetos de AWS. Otros proveedores compatibles con S3 pueden admitir ACL distintas. El valor predeterminado sigue siendo
"public-read", que puede entrar en conflicto con S3 Block Public Access y con las ACL deshabilitadas. Para los buckets privados modernos, establece explícitamente"bucket-default"para omitir el encabezado de ACL generado y no proporciones encabezados de ACL ni de concesión enheaders."private"sigue enviando una ACL.check_integrityboolean(valor predeterminado:false)Calcula y envía la suma de comprobación del archivo para que S3 verifique su integridad después de la subida, lo que puede ayudar con problemas ocasionales de archivos dañados.
Activar esta opción aumenta el tiempo total de ejecución, ya que la comprobación de integridad puede requerir un uso intensivo de la CPU, especialmente con archivos más grandes.
headersRecord<string, string>(valor predeterminado:{"Content-Type":"${file.mime}"})Un objeto que contiene una lista de encabezados que se establecerán para este archivo en S3, como
{ FileURL: "${file.url_name}" }. También puede incluir cualquiera de las variables de Assembly disponibles. Puedes consultar una lista de los encabezados disponibles aquí.Los metadatos del objeto pueden especificarse mediante encabezados
x-amz-meta-*. Ten en cuenta que estos encabezados no admiten valores de metadatos que no sean ASCII.tagsRecord<string, string>(valor predeterminado:{})El etiquetado de objetos te permite categorizar el almacenamiento. Puedes asociar hasta 10 etiquetas con un objeto. Las etiquetas asociadas con un objeto deben tener claves únicas.
hoststring(valor predeterminado:"s3.amazonaws.com")El host del servicio de almacenamiento utilizado. Solo es necesario establecerlo cuando el servicio de almacenamiento no es Amazon S3, pero tiene una API compatible (como hosteurope.de). El protocolo predeterminado es HTTP; para cualquier otro, debes especificarlo explícitamente. Por ejemplo, antepón al host
https://os3://para usar el protocolo correspondiente.no_vhostboolean(valor predeterminado:false)Establécelo en
truesi utilizas un host personalizado y se producen errores de acceso denegado.sign_urls_forstring | numberEste parámetro proporciona URL firmadas en el JSON de resultados (en las propiedades
signed_urlysigned_ssl_url). El número que establezcas como valor de este parámetro será el tiempo de expiración de la URL en segundos. Si no se utiliza este parámetro, no se firma ninguna URL.session_tokenstringEl token de sesión que corresponde al ID de clave de acceso temporal de AWS y a la clave de acceso secreta temporal proporcionados para esta subida. El Robot no asume ningún rol ni renueva estas credenciales; deben seguir siendo válidas durante toda la subida.
Demos
Publicaciones relacionadas del blog
- Actualización de la API: renombramos Robots para mayor claridad
- Abordar inconsistencias de peticiones PUT de S3 en Transloadit
- Presentamos el parámetro 'url_prefix' del Robot /s3/store
- Lanzamos el Robot SFTP y estrenamos nueva página de inicio
- Todos los Robots ya admiten Assembly Variables ampliadas
- Cambio a la CLI oficial de S3 para exportar mejor los archivos
- Cómo abordamos el incidente de S3 con correcciones y descuentos
- Nuevo modelo de precios para futuros clientes de Transloadit
- No-code real-time video uploading with Bubble & Transloadit (English)
- Exporta archivos a DigitalOcean Spaces con facilidad
- Crear videos de formas de onda de audio con FFmpeg y Node.js
- Nueva función: transcripción automática de videos con subtítulos
- Hitos y avances de Transloadit en 2021
- Ampliamos nuestra API para aprovisionar mejor con Terraform
- ¿Qué es la localización de contenido?
- Cómo configurar un bucket de S3 para usar con Transloadit
- Corregir automáticamente la orientación de páginas en documentos
- Eliminación automática de fondos en imágenes
- Genera imágenes impresionantes a partir de texto con IA
- Amplía y mejora imágenes de baja resolución en una Assembly
- Extrae texto e imágenes de PDF con /document/extract
- Migrar desde Cloudinary, Filestack, Mux o Uploadcare