Filtrar arquivos
🤖/file/filter direciona arquivos para diferentes Steps de codificação com base nas suas condições.

Pense neste Robot como uma condição if/else para criar fluxos de trabalho avançados de conversão de arquivos. Com ele, você pode filtrar e direcionar determinados arquivos enviados por upload dependendo dos metadados deles.
O Robot tem dois modos de operação:
- Construção de condições a partir de arrays com 3 membros cada. Por exemplo,
["${file.size}", "<=", "720"] - Escrita de condições em JavaScript. Por exemplo,
${file.size <= 720}. Consulte também Avaliação dinâmica.
Se você quiser que um Step /file/filter repasse todos os arquivos de entrada sem alterações, deixe accepts e
declines sem definição ou defina-os como null. Não use "accepts": "true" para isso: strings simples
são tratadas como expressões JavaScript somente quando usam a forma ${...}, como "${true}".
Passar JavaScript permite que você implemente uma lógica tão complexa quanto desejar, mas isso é mais lento do que combinar arrays de condições e será cobrado por invocação via 🤖/script/run.
Condições como arrays
Os parâmetros accepts e declines podem ser definidos, cada um, como um array de arrays com três membros:
- Um valor ou uma variável de Job, como
${file.mime} - Um dos seguintes operadores:
=,==,===,<,>,<=,>=,!=,!==,regex,!regex,includes,!includes,empty,!empty - Um valor ou uma variável de Job, como
50ou"foo"
Exemplos:
[["${file.meta.width}", ">", "${file.meta.height}"]][["${file.size}", "<=", "720"]][["${file.size}", ">", "20mb"]][["720", ">=", "${file.size}"]][["${file.mime}", "regex", "image"]]
Quando você compara com ${file.mime}, o valor normalmente se baseia na extração de metadados
no lado do servidor da Transloadit no fluxo normal de upload, e não apenas no tipo MIME informado
pelo cliente ou navegador. Isso torna /file/filter adequado para rejeitar arquivos rotulados incorretamente.
Dependendo do contêiner do arquivo e das ferramentas de detecção envolvidas, alguns formatos podem ser identificados com
tipos MIME semelhantes, como image/heic ou image/heif.
Se você quiser apenas formatos que os navegadores renderizem de forma consistente, prefira uma lista explícita de permissões, como
^(image/jpeg|image/png|image/gif|image/webp|image/avif)$, em vez de uma regra abrangente ^image/.
Para comparações numéricas (<, >, <=, >=), você pode usar valores em bytes legíveis por humanos, como "20mb", "1gb" ou "512kb". Eles usam multiplicadores binários (com base em 1024). Unidades compatíveis: b, kb, mb, gb, tb, pb (e seus equivalentes IEC kib, mib, gib, tib, pib).
Os operadores includes e !includes funcionam com arrays ou strings (strings usam verificações de substring).
Se você quiser comparar com um valor null ou um valor ausente (por exemplo, um arquivo de áudio não tem a propriedade video_codec nos metadados), compare com "" (uma string vazia). Ofereceremos suporte à comparação adequada com null no futuro, mas não podemos fazer isso facilmente agora sem quebrar a compatibilidade com versões anteriores.
Condições como JavaScript
Os parâmetros accepts e declines podem ser definidos, cada um, como strings de JavaScript que retornam um valor booleano.
Exemplos:
${file.meta.width > file.meta.height}${file.size <= 720}${/image/.test(file.mime)}${Math.max(file.meta.width, file.meta.height) > 100}
Como indicado, cobramos por isso via 🤖/script/run. Consulte também Avaliação dinâmica para mais detalhes sobre a sintaxe permitida e o comportamento.
Exemplo de uso
Rejeitar arquivos maiores que 20 MB:
{
"steps": {
"filtered": {
"declines": [
[
"${file.size}",
">",
"20mb"
]
],
"error_msg": "File size must not exceed 20 MB",
"error_on_decline": true,
"robot": "/file/filter",
"use": ":original"
}
}
}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
acceptsnull | string | Array<[string | string | number | null | Array<string | string | number | null>, "=" | "==" | "===" | "<" | ">" | "<=" | ">=" | , string | string | number | null | Array<string | string | number | null>]>Arquivos que atenderem a pelo menos um requisito serão aceitos; caso contrário, serão rejeitados. Se o valor for
null, todos os arquivos serão aceitos. Se o array estiver vazio, nenhum arquivo será aceito. Omita este parâmetro ou defina-o comonullquando quiser que o Step deixe todos os arquivos passarem. Exemplos:[["${file.mime}", "==", "image/gif"]][["${file.size}", "<", "5kb"]]Para comparações numéricas (
<,>,<=,>=), há suporte a valores de bytes em formato legível, como"20mb","1gb"ou"512kb".Se o parâmetro
condition_typeestiver definido como"and", todos os requisitos deverão ser atendidos para que o arquivo seja aceito.Se
acceptsedeclinesforem fornecidos, os requisitos emacceptsserão avaliados primeiro, antes das condições emdeclines.declinesnull | string | Array<[string | string | number | null | Array<string | string | number | null>, "=" | "==" | "===" | "<" | ">" | "<=" | ">=" | , string | string | number | null | Array<string | string | number | null>]>Arquivos que atenderem a pelo menos um requisito serão rejeitados; caso contrário, serão aceitos. Se o valor for
nullou um array vazio, nenhum arquivo será rejeitado. Exemplos:[["${file.size}", ">", "1024"]][["${file.size}", ">", "20mb"]]Para comparações numéricas (
<,>,<=,>=), há suporte a valores de bytes em formato legível, como"20mb","1gb"ou"512kb".Se o parâmetro
condition_typeestiver definido como"and", todos os requisitos deverão ser atendidos para que o arquivo seja rejeitado.Se
acceptsedeclinesforem fornecidos, os requisitos emacceptsserão avaliados primeiro, antes das condições emdeclines.condition_typeand | or(padrão:"or")Especifica o tipo de condição segundo o qual os elementos dos arrays
acceptsoudeclinesdevem ser avaliados. Pode ser"or"ou"and".error_on_declineboolean(padrão:false)Se isso estiver definido como
truee um ou mais arquivos forem recusados, a Assembly será interrompida e marcada com erro.error_msgstring(padrão:"One of your files was declined")A mensagem de erro exibida para seus usuários (por exemplo, pelo Uppy) quando um arquivo é recusado e
error_on_declineestá definido comotrue.
Demonstrações
- Service to generate a slideshow from AI-filtered images (English)
- Automatic explicit content detection service (English)
- Automatic image recognition service (English)
- Service to automatically filter out large video files (English)
- Rotate image to portrait mode if horizontal (English)
- Service to automatically filter files to separate encoding Steps (English)
- Service to automatically filter out files smaller than 1KB (English)
- Service to only resize larger images when resizing files (English)
- Service to reject files containing copyright (English)
- Service to preserve transparency across image types (English)
Publicações relacionadas no blog
- Launch of new /file/filter Robot for file filtering (English)
- Introducing new Robots & features for file handling (English)
- New jQuery SDK version 2.1.0 released! (English)
- jQuery SDK 2.4.0: key fixes for better stability (English)
- Enhancing jQuery SDK with tests and a critical patch (English)
- Major performance enhancements for faster Assemblies (English)
- Introducing our new virus scanning Robot for safer uploads (English)
- New pricing model for future Transloadit customers (English)
- Transloadit launches Turbo Mode for faster video encoding (English)
- Efficient Dropbox to SFTP file transfer with optimization (English)
- Tutorial: file filtering & virus scanning with Transloadit (English)
- Tech preview: new AI Robots for enhanced media processing (English)
- Transloadit’s 2021 milestones and progress (English)
- Styling subtitles with Transloadit: 3 creative ways (English)
- Faster audio and video concatenation (English)
- Inspect copyright metadata and watermark images with Transloadit (English)
- Use Transloadit to automatically filter NSFW images (English)