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](/de/docs/topics/dynamic-evaluation.md).

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 EN (English)](/docs/robots/script-run.md) abgerechnet.

### Bedingungen als Arrays

Die Parameter `accepts` und `declines` können jeweils auf ein Array aus Arrays mit drei Elementen gesetzt werden:

1. Ein Wert oder eine Job-Variable, beispielsweise `${file.mime}`
2. Einer der folgenden Operatoren: `=`, `==`, `===`, `<`, `>`, `<=`, `>=`, `!=`, `!==`, `regex`, `!regex`, `includes`, `!includes`, `empty`, `!empty`
3. Ein Wert oder eine Job-Variable, beispielsweise `50` oder `"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).

###### Warnung

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 EN (English)](/docs/robots/script-run.md) ab. Weitere Einzelheiten zur zulässigen Syntax und zum Verhalten finden Sie unter [Dynamische Auswertung](/de/docs/topics/dynamic-evaluation.md).
