Filtrer des fichiers
🤖/file/filter dirige les fichiers vers différents Steps d’encodage selon vos conditions.

Considérez ce Robot comme une condition if/else permettant de créer des flux de travail avancés de conversion de fichiers. Il vous permet de filtrer et d’orienter certains fichiers téléversés en fonction de leurs métadonnées.
Le Robot dispose de deux modes de fonctionnement :
- Construire des conditions à partir de tableaux contenant chacun 3 éléments. Par exemple,
["${file.size}", "<=", "720"] - Écrire des conditions en JavaScript. Par exemple,
${file.size <= 720}. Voir également Évaluation dynamique.
Si vous souhaitez qu’un Step /file/filter laisse passer chaque fichier d’entrée sans modification, laissez accepts et
declines non définis, ou définissez-les sur null. N’utilisez pas "accepts": "true" pour cela : les chaînes simples
ne sont traitées comme des expressions JavaScript que lorsqu’elles utilisent la forme ${...}, comme "${true}".
L’utilisation de JavaScript vous permet de mettre en œuvre une logique aussi complexe que vous le souhaitez. Elle est toutefois plus lente que la combinaison de tableaux de conditions et est facturée à chaque invocation via 🤖/script/run.
Conditions sous forme de tableaux
Les paramètres accepts et declines peuvent chacun être définis comme un tableau de tableaux à trois éléments :
- Une valeur ou une variable de Job, comme
${file.mime} - L’un des opérateurs suivants :
=,==,===,<,>,<=,>=,!=,!==,regex,!regex,includes,!includes,empty,!empty - Une valeur ou une variable de Job, comme
50ou"foo"
Exemples :
[["${file.meta.width}", ">", "${file.meta.height}"]][["${file.size}", "<=", "720"]][["${file.size}", ">", "20mb"]][["720", ">=", "${file.size}"]][["${file.mime}", "regex", "image"]]
Lorsque vous effectuez une comparaison avec ${file.mime}, la valeur repose généralement sur l’extraction des métadonnées
côté serveur par Transloadit dans le flux normal de téléversement, plutôt qu’uniquement sur le type MIME indiqué
par le client ou le navigateur. /file/filter convient donc pour rejeter les fichiers mal étiquetés.
Selon le conteneur du fichier et les outils de détection utilisés, certains formats peuvent être signalés sous
des types MIME étroitement liés, tels que image/heic ou image/heif.
Si vous souhaitez uniquement des formats dont les navigateurs assurent le rendu de manière cohérente, privilégiez une liste d’autorisation explicite telle que
^(image/jpeg|image/png|image/gif|image/webp|image/avif)$ plutôt qu’une règle générale ^image/.
Pour les comparaisons numériques (<, >, <=, >=), vous pouvez utiliser des valeurs en octets lisibles, telles que "20mb", "1gb" ou "512kb". Elles utilisent des multiplicateurs binaires (de base 1024). Unités prises en charge : b, kb, mb, gb, tb, pb (et leurs équivalents IEC kib, mib, gib, tib, pib).
Les opérateurs includes et !includes fonctionnent avec des tableaux ou des chaînes (pour les chaînes, ils vérifient la présence de sous-chaînes).
Si vous souhaitez effectuer une comparaison avec une valeur null ou une valeur absente (par exemple, un fichier audio n’a pas de propriété video_codec dans ses métadonnées), utilisez plutôt "" (une chaîne vide) pour la comparaison. Nous prendrons en charge la comparaison correcte avec null à l’avenir, mais nous ne pouvons pas facilement le faire actuellement sans rompre la rétrocompatibilité.
Conditions sous forme de JavaScript
Les paramètres accepts et declines peuvent chacun être définis comme des chaînes de code JavaScript renvoyant une valeur booléenne.
Exemples :
${file.meta.width > file.meta.height}${file.size <= 720}${/image/.test(file.mime)}${Math.max(file.meta.width, file.meta.height) > 100}
Comme indiqué, nous facturons cette utilisation via 🤖/script/run. Voir également Évaluation dynamique pour plus de détails sur la syntaxe autorisée et le comportement.
Exemple d’utilisation
Rejeter les fichiers de plus de 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"
}
}
}Paramètres
interpolateboolean | Record<string, boolean>Détermine si les Assembly Variables sont interpolées pour chaque champ d’instruction.
Par défaut, la plupart des champs d’instruction des Robots interpolent les Assembly Variables. Définissez ce paramètre sur
falsepour traiter tous les champs d’instruction comme du texte littéral, ou définissez le chemin d’un champ individuel surfalsepour traiter uniquement ce champ comme du texte littéral. Pour les champs propres à un Robot qui sont littéraux par défaut, définissez ce paramètre surtrueou définissez le chemin de ce champ surtruepour réactiver l’interpolation.Utilisez des noms de champs tels que
path, ou des chemins avec points tels queffmpeg.vfpour les objets imbriqués.output_metaRecord<string, boolean> | boolean | Array<string>Permet de spécifier un ensemble de métadonnées dont le calcul est plus coûteux en puissance CPU et qui sont donc désactivées par défaut afin que le traitement de vos Assemblies reste rapide.
Pour les images, vous pouvez ajouter
"has_transparency": truedans cet objet pour déterminer si l’image contient des parties transparentes, et"dominant_colors": truepour extraire de l’image un tableau de codes couleur hexadécimaux.Pour les images, vous pouvez également ajouter
"blurhash": truepour extraire une chaîne BlurHash — une représentation compacte d’un espace réservé pour l’image, utile pour afficher un aperçu flou pendant le chargement de l’image complète.Pour les images,
"thumbhash": trueextrait plutôt un ThumbHash encodé en base64 dansmeta.thumbhash, accompagné demeta.has_alpha(qui indique si un canal alpha existe, même lorsque l’image est entièrement opaque). Il décrit les pixels orientés selon les données EXIF et utilise la première image des images animées. L’extraction est effectuée au mieux : les images de plus de 40 mégapixels, les formats non pris en charge ou un décodage échoué ou limité ne produisent aucun espace réservé. Une extraction réussie ajoute des frais de métadonnées équivalents à 20 % des octets de ce fichier. Aucun supplément ThumbHash ne s’applique lorsque l’option est désactivée ou lorsqu’aucun hash n’est produit.Définissez cette option sur le Step qui produit l’image, par exemple
/upload/handlepour les originaux téléversés ou/image/resizepour les sorties traitées. La définir uniquement sur/transloadit/storene déclenche pas l’extraction : le stockage conserve les métadonnées du Step producteur. Transloadit Storage conserve un hash généré avec sa version immuable et le renvoie dans les résultats stockés et lors des lectures natives de ressources. Les téléversements directs vers S3 ne génèrent pas d’espaces réservés. Un espace réservé contient des informations sur l’image : protégez-le donc avec les mêmes contrôles d’accès que l’image complète.Pour les vidéos, vous pouvez ajouter le paramètre
"colorspace": truepour extraire l’espace colorimétrique de la vidéo de sortie.Pour les vidéos, vous pouvez également ajouter
"interlaced": truepour détecter si la vidéo est entrelacée. Cette option combine l’indicateur ffprobe peu coûteuxfield_orderavec une passe d’échantillonnageidetlimitée sur les premières images de la source, et exposeinterlaced,field_orderainsi qu’un objet de diagnosticinterlace_detectionsousfile.meta. Cette opération est coûteuse en calcul et facturée en conséquence.Pour l’audio, vous pouvez ajouter
"mean_volume": truepour obtenir une valeur unique représentant le volume moyen du fichier audio.Vous pouvez également définir cette option sur
falsepour ignorer l’extraction des métadonnées et accélérer le transcodage.user_metaRecord<string, any>(par défaut :{})Ajoute des métadonnées JSON personnalisées à chaque fichier émis sans modifier son contenu. Les objets et tableaux imbriqués sont pris en charge.
L’héritage dépend du Robot. Les valeurs sont fusionnées avec la valeur
user_metaexistante du fichier de sortie ; le Step actuel remplace les clés de premier niveau correspondantes. Attribuez explicitement les clés requises lorsqu’un Robot crée de nouvelles sorties.Dans les Steps de traitement,
${file.*}désigne la première entrée et${result.*}le fichier émis. Les valeurs sont évaluées pour chaque sortie après l’exécution du Robot, avant l’extraction ultérieure des métadonnées et le stockage temporaire. Sur:original, les valeurs sont évaluées pour chaque téléversement avant l’extraction des métadonnées.Les Steps en aval lisent
${file.user_meta.key}. Consultez Métadonnées personnalisées pour un exemple complet et les règles d’héritage.resultboolean(par défaut :false)Indique si les résultats de ce Step doivent figurer dans l’Assembly Status JSON
queuebatchDéfinir la file d’attente sur « batch » abaisse manuellement la priorité des Jobs de ce Step afin d’éviter de consommer des emplacements prioritaires de Jobs pour des Jobs qui n’ont pas besoin d’un temps d’attente nul dans la file
force_acceptboolean(par défaut :false)Forcer un Robot à accepter un type de fichier qu’il aurait ignoré.
Par défaut, les Robots ignorent les fichiers qu’ils ne connaissent pas. Le Robot 🤖/video/encode, par exemple, ignorera volontiers les images en entrée.
Avec le paramètre
force_acceptdéfini surtrue, vous pouvez forcer les Robots à accepter tous les fichiers qui leur sont envoyés. Cela entraîne généralement des erreurs et ne doit être utilisé que pour le débogage ou pour traiter des cas limites.ignore_errorsboolean | Array<meta | execute>(par défaut :[])Ignore les erreurs pendant certaines phases du traitement.
Si vous définissez cette valeur sur
["meta"], le Robot ignorera les erreurs lors de l’extraction des métadonnées.Si vous définissez cette valeur sur
["execute"], le Robot ignorera les erreurs lors de la phase d’exécution principale.Définir cette valeur sur
trueéquivaut à["meta", "execute"]: les erreurs seront alors ignorées dans les deux phases.usestring | Array<string> | Array<object> | objectIndique quel(s) Step(s) utiliser comme entrée.
- Vous pouvez choisir n’importe quel nom pour les Steps, sauf
":original"(réservé aux téléversements des utilisateurs gérés par Transloadit) - Vous pouvez fournir plusieurs Steps en entrée à l’aide de tableaux :
{ "use": [ ":original", "encoded", "resized" ] } - Vous pouvez également étiqueter les Steps d’entrée avec
aspour transmettre une intention sémantique aux Robots :{ "use": [ { "name": ":original", "as": "image" }, { "name": ":original", "as": "mask" } ] }
AstuceC’est probablement tout ce que vous devez savoir sur
use, mais vous pouvez consulter les cas d’utilisation avancés.- Vous pouvez choisir n’importe quel nom pour les Steps, sauf
acceptsnull | string | Array<[string | string | number | null | Array<string | string | number | null>, "=" | "==" | "===" | "<" | ">" | "<=" | ">=" | , string | string | number | null | Array<string | string | number | null>]>Les fichiers qui satisfont à au moins une exigence seront acceptés, et refusés dans le cas contraire. Si la valeur est
null, tous les fichiers seront acceptés. Si le tableau est vide, aucun fichier ne sera accepté. Omettez ce paramètre ou définissez-le surnulllorsque vous souhaitez que le Step laisse passer chaque fichier. Exemples :[["${file.mime}", "==", "image/gif"]][["${file.size}", "<", "5kb"]]Pour les comparaisons numériques (
<,>,<=,>=), les valeurs en octets lisibles, telles que"20mb","1gb"ou"512kb", sont prises en charge.Si le paramètre
condition_typeest défini sur"and", toutes les exigences doivent être satisfaites pour que le fichier soit accepté.Si
acceptsetdeclinessont tous deux fournis, les exigences deacceptsseront évaluées en premier, avant les conditions dedeclines.declinesnull | string | Array<[string | string | number | null | Array<string | string | number | null>, "=" | "==" | "===" | "<" | ">" | "<=" | ">=" | , string | string | number | null | Array<string | string | number | null>]>Les fichiers qui répondent à au moins un critère seront refusés, ou acceptés dans le cas contraire. Si la valeur est
nullou un tableau vide, aucun fichier ne sera refusé. Exemples :[["${file.size}", ">", "1024"]][["${file.size}", ">", "20mb"]]Pour les comparaisons numériques (
<,>,<=,>=), les valeurs en octets lisibles, telles que"20mb","1gb"ou"512kb", sont prises en charge.Si le paramètre
condition_typeest défini sur"and", tous les critères doivent être remplis pour que le fichier soit refusé.Si
acceptsetdeclinessont tous deux fournis, les exigences deacceptsseront évaluées en premier, avant les conditions dedeclines.condition_typeand | or(par défaut :"or")Indique le type de condition selon lequel les éléments des tableaux
acceptsoudeclinesdoivent être évalués. Peut valoir"or"ou"and".error_on_declineboolean(par défaut :false)Si ce paramètre est défini sur
trueet qu’un ou plusieurs fichiers sont refusés, l’Assembly sera arrêtée et signalée en erreur.error_msgstring(par défaut :"One of your files was declined")Le message d’erreur affiché à vos utilisateurs (par exemple par Uppy) lorsqu’un fichier est refusé et que
error_on_declineest défini surtrue.
Démonstrations
- 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)
Articles de blog associés
- 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)
- Upscale and enhance low-res images in one Assembly (English)