Dateien filtern
🤖/file/filter leitet Dateien anhand Ihrer Bedingungen an verschiedene Encoding-Steps weiter.

Betrachten Sie diesen Robot als eine if/else-Bedingung zum Erstellen fortgeschrittener Workflows für die Dateikonvertierung. Damit können Sie bestimmte hochgeladene Dateien anhand ihrer Metadaten filtern und weiterleiten.
Der Robot bietet zwei Betriebsmodi:
- Bedingungen aus Arrays mit jeweils 3 Elementen erstellen. Beispiel:
["${file.size}", "<=", "720"] - Bedingungen in JavaScript schreiben. Beispiel:
${file.size <= 720}. Siehe auch Dynamische Auswertung.
Wenn ein /file/filter-Step jede Eingabedatei unverändert durchreichen soll, lassen Sie accepts und
declines ungesetzt oder setzen Sie beide auf null. Verwenden Sie hierfür nicht "accepts": "true": Einfache Zeichenfolgen
werden nur dann als JavaScript-Ausdrücke behandelt, wenn sie die Form ${...} verwenden, beispielsweise "${true}".
Mit JavaScript können Sie beliebig komplexe Logik implementieren. Dies ist jedoch langsamer als das Kombinieren von Bedingungs-Arrays und wird bei jedem Aufruf über 🤖/script/run abgerechnet.
Bedingungen als Arrays
Die Parameter accepts und declines können jeweils auf ein Array aus Arrays mit drei Elementen gesetzt werden:
- Ein Wert oder eine Job-Variable, beispielsweise
${file.mime} - Einer der folgenden Operatoren:
=,==,===,<,>,<=,>=,!=,!==,regex,!regex,includes,!includes,empty,!empty - Ein Wert oder eine Job-Variable, beispielsweise
50oder"foo"
Beispiele:
[["${file.meta.width}", ">", "${file.meta.height}"]][["${file.size}", "<=", "720"]][["${file.size}", ">", "20mb"]][["720", ">=", "${file.size}"]][["${file.mime}", "regex", "image"]]
Bei einem Abgleich mit ${file.mime} basiert der Wert im normalen Upload-Ablauf üblicherweise auf der serverseitigen Metadatenextraktion von Transloadit und nicht ausschließlich auf dem vom Client oder Browser gemeldeten MIME-Typ. Dadurch eignet sich /file/filter dazu, falsch gekennzeichnete Dateien abzulehnen. Abhängig vom Dateicontainer und den beteiligten Erkennungswerkzeugen können einige Formate unter eng verwandten MIME-Typen wie image/heic oder image/heif gemeldet werden.
Wenn Sie ausschließlich Formate zulassen möchten, die Browser zuverlässig darstellen, verwenden Sie vorzugsweise eine explizite Positivliste wie ^(image/jpeg|image/png|image/gif|image/webp|image/avif)$ anstelle einer weit gefassten Regel wie ^image/.
Für numerische Vergleiche (<, >, <=, >=) können Sie menschenlesbare Byte-Werte wie "20mb", "1gb" oder "512kb" verwenden. Diese verwenden binäre Multiplikatoren auf Basis von 1024. Unterstützte Einheiten: b, kb, mb, gb, tb, pb (sowie deren IEC-Entsprechungen kib, mib, gib, tib, pib).
Die Operatoren includes und !includes funktionieren mit Arrays oder Zeichenfolgen (bei Zeichenfolgen werden Teilzeichenfolgen geprüft).
Wenn Sie einen Abgleich mit dem Wert null oder mit einem nicht vorhandenen Wert durchführen möchten (beispielsweise wenn eine Audiodatei in ihren Metadaten keine Eigenschaft video_codec besitzt), gleichen Sie stattdessen mit "" (einer leeren Zeichenfolge) ab. Künftig werden wir einen korrekten Abgleich mit null unterstützen. Derzeit ist dies jedoch nicht ohne Weiteres möglich, ohne die Abwärtskompatibilität zu beeinträchtigen.
Bedingungen als JavaScript
Die Parameter accepts und declines können jeweils auf JavaScript-Zeichenfolgen gesetzt werden, die einen booleschen Wert zurückgeben.
Beispiele:
${file.meta.width > file.meta.height}${file.size <= 720}${/image/.test(file.mime)}${Math.max(file.meta.width, file.meta.height) > 100}
Wie beschrieben rechnen wir dies über 🤖/script/run ab. Weitere Einzelheiten zur zulässigen Syntax und zum Verhalten finden Sie unter Dynamische Auswertung.
Anwendungsbeispiel
Dateien ablehnen, die größer als 20 MB sind:
{
"steps": {
"filtered": {
"robot": "/file/filter",
"use": ":original",
"declines": [
[
"${file.size}",
">",
"20mb"
]
],
"error_on_decline": true,
"error_msg": "File size must not exceed 20 MB"
}
}
}Parameter
interpolateboolean | Record<string, boolean>Steuert, ob einzelne Robot-Anweisungsfelder Assembly Variables interpolieren.
Standardmäßig interpolieren die meisten Robot-Anweisungsfelder Assembly Variables. Mit dem Wert
falsebehandeln Sie alle Anweisungsfelder als Literaltext. Wenn Sie stattdessen einen einzelnen Feldpfad auffalsesetzen, wird nur dieses Feld als Literaltext behandelt. Bei Feldern eines bestimmten Robots, die standardmäßig als Literaltext behandelt werden, aktivieren Sie die Interpolation wieder, indem Sie hierfürtruefestlegen oder für den jeweiligen Feldpfad den Werttrueverwenden.Verwenden Sie Feldnamen wie
pathoder für verschachtelte Objekte Punktpfade wieffmpeg.vfals Pfadangabe.output_metaRecord<string, boolean> | boolean | Array<string>Damit können Sie eine Reihe von Metadaten festlegen, deren Berechnung mehr CPU-Ressourcen beansprucht. Sie sind daher standardmäßig deaktiviert, damit Ihre Assemblies schnell verarbeitet werden.
Für Bilder können Sie diesem Objekt den Eintrag
"has_transparency": truehinzufügen, um zu ermitteln, ob das Bild transparente Bereiche enthält. Mit dem Eintrag"dominant_colors": truekönnen Sie außerdem ein Array mit hexadezimalen Farbcodes aus dem Bild extrahieren.Für Bilder können Sie auch den Eintrag
"blurhash": truehinzufügen, um einen BlurHash zu extrahieren – eine kompakte Darstellung eines Platzhalters für das Bild, mit der Sie eine unscharfe Vorschau anzeigen können, während das vollständige Bild geladen wird.Für Videos können Sie den Parameter
"colorspace": truehinzufügen, um den Farbraum des Ausgabevideos zu extrahieren.Für Videos können Sie außerdem den Eintrag
"interlaced": truehinzufügen, um zu erkennen, ob das Video im Zeilensprungverfahren vorliegt. Dazu wird die ressourcenschonende ffprobe-Optionfield_ordermit einem begrenzten Stichprobendurchlauf mithilfe vonidetüber die ersten Frames der Quelle kombiniert. Die Ergebnisseinterlacedundfield_ordersowie das Diagnoseobjektinterlace_detectionwerden dabei unterfile.metaausgegeben. Dies ist rechenintensiv und wird entsprechend abgerechnet.Für Audio können Sie den Eintrag
"mean_volume": truehinzufügen, um einen einzelnen Wert für die durchschnittliche Lautstärke der Audiodatei zu erhalten.Sie können diesen Parameter auch auf
falsesetzen, um die Metadatenextraktion zu überspringen und das Transcoding zu beschleunigen.user_metaRecord<string, any>(Standard:{})Fügt jeder von diesem Robot ausgegebenen Datei benutzerdefinierte Metadaten hinzu, ohne den Dateiinhalt zu verändern.
Die Werte werden mit allen bereits in der Eingabedatei enthaltenen
user_metazusammengeführt. Wenn beide Objekte denselben Schlüssel enthalten, hat der Wert dieses Robots Vorrang. Assembly Variables werden unterstützt, zum Beispiel{ "internal_file_id": "${file.id}" }.resultboolean(Standard:false)Ob die Ergebnisse dieses Steps im Assembly Status JSON enthalten sein sollen
queuebatchWenn Sie die Queue auf „batch“ setzen, wird die Priorität der Jobs für diesen Step manuell herabgestuft. So vermeiden Sie, Priority Job Slots für Jobs zu belegen, die keine Wartezeit von null in der Queue benötigen.
force_acceptboolean(Standard:false)Erzwingt, dass ein Robot einen Dateityp akzeptiert, den er sonst ignorieren würde.
Standardmäßig ignorieren Robots Dateien, deren Typ sie nicht kennen. 🤖/video/encode ignoriert beispielsweise problemlos Eingabebilder.
Wenn Sie den Parameter
force_acceptauftruesetzen, können Sie erzwingen, dass Robots alle übergebenen Dateien akzeptieren. Dies führt in der Regel zu Fehlern und sollte nur zur Fehlersuche oder zur Behandlung von Grenzfällen verwendet werden.ignore_errorsboolean | Array<meta | execute>(Standard:[])Fehler in bestimmten Verarbeitungsphasen ignorieren.
Wenn Sie hierfür
["meta"]festlegen, ignoriert der Robot Fehler bei der Metadatenextraktion.Wenn Sie hierfür
["execute"]festlegen, ignoriert der Robot Fehler während der Hauptausführungsphase.Wenn Sie hierfür
truefestlegen, entspricht dies["meta", "execute"]und Fehler in beiden Phasen werden ignoriert.usestring | Array<string> | Array<object> | objectGibt an, welche Steps als Eingabe verwendet werden sollen.
- Sie können beliebige Namen für Steps wählen, außer
":original"(reserviert für von Transloadit verarbeitete Benutzer-Uploads) - Sie können mehrere Steps mithilfe von Arrays als Eingabe angeben:
{ "use": [ ":original", "encoded", "resized" ] } - Sie können Eingabe-Steps außerdem mit
askennzeichnen, um Robots die semantische Funktion zu übermitteln:{ "use": [ { "name": ":original", "as": "image" }, { "name": ":original", "as": "mask" } ] }
TippDas ist wahrscheinlich alles, was Sie über
usewissen müssen. Sie können sich jedoch auch die erweiterten Anwendungsfälle ansehen.- Sie können beliebige Namen für Steps wählen, außer
acceptsnull | string | Array<[string | string | number | null | Array<string | string | number | null>, "=" | "==" | "===" | "<" | ">" | "<=" | ">=" | , string | string | number | null | Array<string | string | number | null>]>Dateien, die mindestens eine Anforderung erfüllen, werden akzeptiert, alle anderen werden abgelehnt. Ist der Wert
null, werden alle Dateien akzeptiert. Ist das Array leer, werden keine Dateien akzeptiert. Lassen Sie diesen Parameter weg oder setzen Sie ihn aufnull, wenn der Step jede Datei durchreichen soll. Beispiele:[["${file.mime}", "==", "image/gif"]][["${file.size}", "<", "5kb"]]Für numerische Vergleiche (
<,>,<=,>=) werden menschenlesbare Byte-Werte wie"20mb","1gb"oder"512kb"unterstützt.Wenn der Parameter
condition_typeauf"and"gesetzt ist, müssen alle Anforderungen erfüllt sein, damit die Datei akzeptiert wird.Wenn sowohl
acceptsals auchdeclinesangegeben sind, werden zuerst die Anforderungen inacceptsund anschließend die Bedingungen indeclinesausgewertet.declinesnull | string | Array<[string | string | number | null | Array<string | string | number | null>, "=" | "==" | "===" | "<" | ">" | "<=" | ">=" | , string | string | number | null | Array<string | string | number | null>]>Dateien, die mindestens eine Anforderung erfüllen, werden abgelehnt, andernfalls werden sie akzeptiert. Wenn der Wert
nulloder ein leeres Array ist, werden keine Dateien abgelehnt. Beispiele:[["${file.size}", ">", "1024"]][["${file.size}", ">", "20mb"]]Für numerische Vergleiche (
<,>,<=,>=) werden menschenlesbare Byte-Werte wie"20mb","1gb"oder"512kb"unterstützt.Wenn der Parameter
condition_typeauf"and"gesetzt ist, müssen alle Anforderungen erfüllt sein, damit die Datei abgelehnt wird.Wenn sowohl
acceptsals auchdeclinesangegeben sind, werden zuerst die Anforderungen inacceptsund anschließend die Bedingungen indeclinesausgewertet.condition_typeand | or(Standard:"or")Legt den Bedingungstyp fest, nach dem die Einträge der Arrays
acceptsoderdeclinesausgewertet werden sollen. Mögliche Werte sind"or"und"and".error_on_declineboolean(Standard:false)Wenn dies auf
truegesetzt ist und eine oder mehrere Dateien abgelehnt werden, wird die Assembly angehalten und als fehlerhaft markiert.error_msgstring(Standard:"One of your files was declined")Die Fehlermeldung, die Ihren Benutzern angezeigt wird, beispielsweise durch Uppy, wenn eine Datei abgelehnt wird und
error_on_declineauftruegesetzt ist.
Demos
- 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)
Verwandte Blogbeiträge
- 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)
- Celebrating transloadit’s 2021 milestones and progress (English)
- Styling subtitles with Transloadit: 3 creative ways (English)
- Faster audio and video concatenation (English)
- How to check images for copyright using Transloadit (English)
- Use Transloadit to automatically filter NSFW images (English)