Servir arquivos para navegadores web
🤖/file/serve serve arquivos para navegadores web.

Quando quiser que a Transloadit transforme arquivos em tempo real, você pode usar este Robot para determinar qual Step de um Template deve ser servido ao usuário final (via CDN), além de definir informações adicionais sobre os arquivos servidos, como cabeçalhos. Assim, você pode, por exemplo, sugerir à CDN por quanto tempo manter cópias do resultado em cache. Por padrão, instruímos os navegadores a armazenar o resultado em cache por 72 h (259200 segundos) e as CDNs a armazenar o conteúdo em cache por 24 h (86400 segundos). Use o parâmetro cache_duration para personalizar os dois valores de uma só vez.
🤖/file/serve atua apenas como camada de integração entre nosso mecanismo de Assembly e a entrega de arquivos por HTTP. Ele permite que você escolha o resultado adequado de uma série de Steps pelo parâmetro use e configure cabeçalhos no conteúdo original. Suas responsabilidades terminam aí, e 🤖/tlcdn/deliver assume a distribuição desse conteúdo original pelo mundo, garantindo que ele fique em cache perto dos seus usuários finais quando fizerem requisições como https://my-app.tlcdn.com/resize-img/canoe.jpg?w=500. 🤖/tlcdn/deliver não faz parte das suas Assembly Instructions, mas pode aparecer nas suas faturas, pois a distribuição das cópias em cache gera cobranças de largura de banda. 🤖/file/serve só gera cobranças quando a CDN não tem uma cópia em cache e solicita a regeneração do conteúdo original, o que, dependendo das suas configurações de cache, pode ocorrer apenas uma vez por mês ou por ano, por arquivo/transformação.
Embora seja teoricamente possível usar 🤖/file/serve diretamente em arquivos HTML, desaconselhamos fortemente essa prática, pois, se seu site ficar popular e a URL de mídia tratada por /file/serve receber um milhão de acessos, isso representará um milhão de novos redimensionamentos de imagem. Colocar uma CDN à frente dele (e aproveitar o cache que ela oferece) garante que as cobranças de codificação e as latências permaneçam baixas.
Considere também configurar cabeçalhos de cache e diretivas de controle de cache para controlar como o conteúdo é armazenado em cache e invalidado nos servidores de borda da CDN, equilibrando atualização e eficiência.
Segurança do Smart CDN com URLs assinadas
Você pode usar URLs assinadas do Smart CDN para evitar abusos da nossa plataforma de codificação. Abaixo está um exemplo rápido em Node.js usando nosso SDK Node, mas também há exemplos para outras linguagens e SDKs.
// 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)
Isso gerará uma URL assinada do Smart CDN que inclui parâmetros de autenticação, impedindo o acesso não autorizado aos seus endpoints de transformação.
Para novas integrações, use o formato moderno sig + exp. As assinaturas legadas s estão descontinuadas. Observe também que o prazo de expiração é, na prática, o período de cache dos resultados assinados: prazos mais curtos tornam o controle de acesso mais rigoroso, enquanto prazos mais longos melhoram a reutilização do cache e reduzem o volume de codificação.
Mais informações
- Entrega de conteúdo
- Preços de 🤖/file/serve
- Preços de 🤖/tlcdn/deliver
- Artigo do blog sobre o recurso de pré-visualização de arquivos (English)
Exemplo de uso
Sirva arquivos transformados com duração explícita de cache no navegador e na CDN:
{
"steps": {
"resized": {
"height": 450,
"resize_strategy": "fit",
"robot": "/image/resize",
"use": ":original",
"width": 800
},
"served": {
"cache_duration": 86400,
"robot": "/file/serve",
"use": "resized"
}
}
}Parâmetros
interpolateboolean | Record<string, boolean>Controla se as Assembly Variables são interpoladas em campos individuais de instruções.
Por padrão, a maioria dos campos de instruções dos Robots interpola Assembly Variables. Defina isso como
falsepara tratar todos os campos de instruções como texto literal, ou defina o caminho de um campo individual comofalsepara tratar apenas esse campo como texto literal. Para campos específicos de um Robot que são literais por padrão, defina isso comotrueou defina o caminho desse campo comotruepara voltar a usar a interpolação.Use nomes de campos como
pathou caminhos com pontos comoffmpeg.vfpara objetos aninhados.output_metaRecord<string, boolean> | boolean | Array<string>Permite especificar um conjunto de metadados cujo cálculo exige mais CPU e que, por isso, vem desativado por padrão para manter o processamento das suas Assemblies rápido.
Para imagens, você pode adicionar
"has_transparency": trueneste objeto para extrair se a imagem contém partes transparentes e"dominant_colors": truepara extrair um array de códigos de cores hexadecimais da imagem.Para imagens, você também pode adicionar
"blurhash": truepara extrair uma string BlurHash — uma representação compacta de um placeholder da imagem, útil para exibir uma prévia desfocada enquanto a imagem completa carrega.Para vídeos, você pode adicionar o parâmetro
"colorspace": truepara extrair o espaço de cores do vídeo de saída.Para vídeos, você também pode adicionar
"interlaced": truepara detectar se o vídeo é entrelaçado. Isso combina a flag computacionalmente baratafield_orderdo ffprobe com uma passagem de amostragemidetlimitada sobre os primeiros quadros da origem, expondointerlaced,field_ordere um objeto de diagnósticointerlace_detectionemfile.meta. Isso é computacionalmente caro e cobrado de acordo.Para áudio, você pode adicionar
"mean_volume": truepara obter um único valor que representa o volume médio do arquivo de áudio.Você também pode definir isso como
falsepara pular a extração de metadados e acelerar a transcodificação.user_metaRecord<string, any>(padrão:{})Adiciona metadados JSON personalizados a cada arquivo emitido sem modificar seu conteúdo. Objetos e arrays aninhados são suportados.
A herança depende do Robot. Os valores são mesclados com o
user_metaexistente no arquivo de saída; o Step atual substitui as chaves de nível superior com o mesmo nome. Atribua explicitamente as chaves necessárias quando um Robot criar novas saídas.Nos Steps de processamento,
${file.*}se refere à primeira entrada e${result.*}ao arquivo emitido. Os valores são avaliados para cada saída após a execução do Robot, antes da extração subsequente de metadados e do armazenamento temporário. Em:original, os valores são avaliados para cada upload antes da extração de metadados.Os Steps subsequentes leem
${file.user_meta.key}. Consulte Metadados personalizados para ver um exemplo completo e as regras de herança.resultboolean(padrão:false)Se os resultados deste Step devem estar presentes no Assembly Status JSON
queuebatchDefinir a fila como “batch” rebaixa manualmente a prioridade dos Jobs deste Step, para evitar o consumo de vagas prioritárias de Jobs em Jobs que não precisam de tempo zero de espera na fila
force_acceptboolean(padrão:false)Forçar um Robot a aceitar um tipo de arquivo que ele teria ignorado.
Por padrão, os Robots ignoram arquivos que não conhecem. O 🤖/video/encode, por exemplo, ignora tranquilamente imagens de entrada.
Com o parâmetro
force_acceptdefinido comotrue, você pode forçar os Robots a aceitar todos os arquivos enviados a eles. Isso normalmente leva a erros e só deve ser usado para depuração ou para lidar com casos extremos.ignore_errorsboolean | Array<meta | execute>(padrão:[])Ignorar erros durante fases específicas do processamento.
Definir isso como
["meta"]fará com que o Robot ignore erros durante a extração de metadados.Definir isso como
["execute"]fará com que o Robot ignore erros durante a fase principal de execução.Definir isso como
trueequivale a["meta", "execute"]e fará com que erros sejam ignorados nas duas fases.usestring | Array<string> | Array<object> | objectEspecifica quais Steps usar como entrada.
- Você pode escolher qualquer nome para os Steps, exceto
":original"(reservado para uploads de usuários tratados pela Transloadit) - Você pode fornecer vários Steps como entrada usando arrays:
{ "use": [ ":original", "encoded", "resized" ] } - Você também pode marcar os Steps de entrada com
aspara transmitir intenção semântica aos Robots:{ "use": [ { "name": ":original", "as": "image" }, { "name": ":original", "as": "mask" } ] }
DicaProvavelmente é tudo o que você precisa saber sobre
use, mas você pode ver os casos de uso avançados.- Você pode escolher qualquer nome para os Steps, exceto
cache_durationstring | numberUma duração opcional em segundos durante a qual o arquivo servido deve ficar em cache. Quando definido, esse valor é usado nas diretivas
max-age(cache do navegador) es-maxage(cache compartilhado/CDN) do cabeçalhoCache-Control, substituindo os valores padrão. Por exemplo, definircache_durationcomo43200armazenaria o arquivo em cache por 12 horas.Isso é útil para controlar a retenção de dados em CDNs. Por exemplo, se seus arquivos temporários forem excluídos após 24 horas, você pode definir
cache_durationcomo86400para garantir que as cópias em cache também expirem dentro desse período.download_namestringDisponibilize como anexo usando este nome de arquivo Unicode. Se o parâmetro estiver vazio ou for omitido, a entrega permanece inline. Sobrescreve um cabeçalho Content-Disposition sem alterar os bytes nem o suporte a Range.
headersRecord<string, string>(padrão:{"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"})Um objeto contendo uma lista de cabeçalhos a serem definidos para um arquivo ao servi-lo a uma CDN ou navegador, como
{ FileURL: "${file.url_name}" }, que serão mesclados sobre os valores padrão e podem incluir qualquer Assembly Variable disponível.O cabeçalho
Accept-Ranges: bytesindica que há suporte a requisições de intervalo HTTP para reprodução de mídia com navegação pela linha do tempo. Isso depende de todos os backends de armazenamento da Transloadit (S3, GCS etc.) respeitarem os cabeçalhos de requisição Range. Os cabeçalhos CORS incluemRangeeIf-RangeemAccess-Control-Allow-Headerspara permitir requisições de intervalo entre origens e expõemContent-Range,Content-LengtheAccept-RangesviaAccess-Control-Expose-Headerspara que o JavaScript do navegador possa ler esses valores.
Publicações relacionadas no blog
- Building an alt-text to speech generator with Transloadit (English)
- Easy instant website screenshots via Transloadit CDN (English)
- Smart CDN enhanced with AI-powered face detection (English)
- How to get started with the Transloadit Smart CDN (English)
- Save costs with on-demand video encoding (English)