Servir archivos a navegadores web
🤖/file/serve sirve archivos a navegadores web.

Cuando quieras que Transloadit transforme archivos al vuelo, puedes usar este Robot para determinar qué Step de un Template debe entregarse al usuario final (mediante una CDN), así como para agregar información adicional a los archivos entregados, como encabezados. De esta manera, por ejemplo, puedes indicarle a la CDN durante cuánto tiempo debe conservar copias en caché del resultado. De forma predeterminada, indicamos a los navegadores que almacenen el resultado en caché durante 72h (259200 segundos) y a las CDN que almacenen el contenido en caché durante 24h (86400 segundos). Usa el parámetro cache_duration para personalizar ambos valores a la vez.
🤖/file/serve actúa únicamente como capa de enlace entre nuestro motor de Assembly y la entrega de archivos mediante HTTP. Te permite seleccionar, mediante el parámetro use, el resultado adecuado de una serie de Steps y configurar encabezados en el contenido original. Ahí terminan sus responsabilidades. A continuación, 🤖/tlcdn/deliver se encarga de distribuir globalmente este contenido original y de garantizar que se almacene en caché cerca de tus usuarios finales cuando hagan solicitudes como https://my-app.tlcdn.com/resize-img/canoe.jpg?w=500, entre otras. 🤖/tlcdn/deliver no forma parte de tus Assembly Instructions, pero puede aparecer en tus facturas, ya que la distribución de las copias en caché genera cargos por ancho de banda. 🤖/file/serve solo genera cargos cuando la CDN no tiene una copia en caché y solicita que se vuelva a generar el contenido original, lo cual, según tu configuración de caché, podría suceder apenas una vez al mes o al año por cada archivo o transformación.
Aunque en teoría podrías usar 🤖/file/serve directamente en archivos HTML, recomendamos firmemente no hacerlo. Si tu sitio se vuelve popular y la URL del contenido multimedia que gestiona /file/serve recibe un millón de solicitudes, se realizarán un millón de nuevos cambios de tamaño de imagen. Colocarlo detrás de una CDN (y aprovechar el almacenamiento en caché que esta proporciona) garantiza que tanto los cargos de encoding como las latencias se mantengan bajos.
Considera también configurar encabezados de caché y directivas de control de caché para controlar cómo se almacena en caché y se invalida el contenido en los servidores perimetrales de la CDN, equilibrando la actualización del contenido y la eficiencia.
Seguridad de Smart CDN con URL firmadas
Puedes aprovechar las URL firmadas de Smart CDN para evitar el uso indebido de nuestra plataforma de encoding. A continuación se muestra un ejemplo rápido de Node.js que usa nuestro SDK de Node, y también hay ejemplos para otros lenguajes y SDK.
// yarn add transloadit
// or
// npm install --save transloadit
import { Transloadit } from 'transloadit'
const transloadit = new Transloadit({
authKey: 'YOUR_TRANSLOADIT_KEY',
authSecret: 'YOUR_TRANSLOADIT_SECRET',
})
const url = transloadit.getSignedSmartCDNUrl({
workspace: 'YOUR_WORKSPACE',
template: 'YOUR_TEMPLATE',
input: 'image.png',
urlParams: { height: 100, width: 100 },
})
console.log(url)
Esto generará una URL firmada de Smart CDN que incluye parámetros de autenticación, lo que impide el acceso no autorizado a tus endpoints de transformación.
Para integraciones nuevas, usa el formato moderno sig + exp. Las firmas heredadas s están obsoletas. Ten en cuenta también que el periodo de vencimiento funciona en la práctica como periodo de caché para los resultados firmados: los vencimientos más cortos refuerzan el control de acceso, mientras que los más largos mejoran la reutilización de la caché y reducen el volumen de encoding.
Más información
- Entrega de contenido
- Precios de 🤖/file/serve
- Precios de 🤖/tlcdn/deliver
- Publicación del blog sobre la función de vista previa de archivos (English)
Ejemplo de uso
Entrega archivos transformados con una duración explícita de la caché del navegador y de la CDN:
{
"steps": {
"resized": {
"robot": "/image/resize",
"use": ":original",
"width": 800,
"height": 450,
"resize_strategy": "fit"
},
"served": {
"robot": "/file/serve",
"use": "resized",
"cache_duration": 86400
}
}
}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 que tus Assemblies se procesen rápidamente.
Para imágenes, puedes añadir
"has_transparency": truea este objeto para determinar 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 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 en recursos de procesamiento 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 establecerlo en
falsepara omitir la extracción de metadatos y acelerar la transcodificación.user_metaRecord<string, any>(valor predeterminado:{})Añade metadatos personalizados a cada archivo emitido por este Robot sin modificar el contenido del archivo.
Los valores se combinan con los
user_metaexistentes en el archivo de entrada. Si ambos objetos contienen la misma clave, el valor de este Robot tiene prioridad. Se admiten Assembly Variables, por ejemplo{ "internal_file_id": "${file.id}" }.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
cache_durationstring | numberUna duración opcional, en segundos, durante la cual el archivo servido debe almacenarse en caché. Cuando se establece, este valor se usa tanto para la directiva
max-age(caché del navegador) como para la directivas-maxage(caché compartida o de CDN) en el encabezadoCache-Control, lo que anula los valores predeterminados. Por ejemplo, establecercache_durationen43200almacenaría el archivo en caché durante 12 horas.Esto es útil para controlar la retención de datos en las CDN. Por ejemplo, si tus archivos temporales se eliminan después de 24 horas, puedes establecer
cache_durationen86400para garantizar que las copias almacenadas en caché también caduquen dentro de ese plazo.headersRecord<string, string>(valor predeterminado:{"Access-Control-Allow-Headers":"X-Requested-With, Content-Type, Cache-Control, Accept, Content-Length, Transloadit-Client, Authorization, Range, If-Range","Access-Control-Allow-Methods":"POST, GET, PUT, DELETE, OPTIONS","Access-Control-Allow-Origin":"*","Access-Control-Expose-Headers":"Transloadit-Assembly-URL, Content-Range, Content-Length, Accept-Ranges","Cache-Control":"public, max-age=259200, s-maxage=86400","Content-Type":"${file.mime}; charset=utf-8","Transloadit-Assembly":"…","Transloadit-RequestID":"…","Accept-Ranges":"bytes"})Un objeto que contiene una lista de encabezados que se establecerán para un archivo cuando lo entreguemos a una CDN o un navegador web, como
{ FileURL: "${file.url_name}" }. Estos encabezados se combinarán con los valores predeterminados y pueden incluir cualquier Assembly Variable disponible.El encabezado
Accept-Ranges: bytesindica que se admiten solicitudes de rango HTTP para desplazarse por la línea de tiempo durante la reproducción de contenido multimedia. Esto depende de que todos los backends de almacenamiento de Transloadit (S3, GCS, etc.) respeten los encabezados de solicitud Range. Los encabezados CORS incluyenRangeyIf-RangeenAccess-Control-Allow-Headerspara permitir solicitudes de rango entre orígenes, y exponenContent-Range,Content-LengthyAccept-RangesmedianteAccess-Control-Expose-Headerspara que el código JavaScript del navegador pueda leer estos valores.