# Assembly Variables

Transloadit unterstützt Variablen innerhalb Ihrer Assemblies, mit denen Sie leistungsfähigere Workflows erstellen können. Sie können beispielsweise Dateien anhand der `width` filtern, den Speicherort anhand des `type` bestimmen und vieles mehr. Wir haben eine vollständige Liste der verfügbaren Platzhaltervariablen fürAssembly Variables zusammengestellt. Sie können in jedem Parameterwert eines beliebigen Robot verwendet werden.

###### Hinweis

Bedingungen für Eigenschaften, die eine Datei nicht besitzt, werden ignoriert. Ein Bild hat beispielsweise kein `${file.meta.bitrate}`. Beachten Sie außerdem, dass `${file.width}` ignoriert wird. Verwenden Sie stattdessen `${file.meta.width}`.

* `${assembly.id}` — Die ID der Assembly, die den aktuellen Upload darstellt. Sie ist eine UUIDv4 ohne Bindestriche.
* `${assembly.region}` — Die AWS-Region, in der die Assembly verarbeitet wird. Damit können Sie Dateien aus einem Bucket in derselben Region importieren, um Kosten und Latenzen bei der Datenübertragung zu reduzieren.
* `${assembly.parent_id}` — Die ID der übergeordneten Assembly, wenn diese Assembly erneut ausgeführt wird.
* `${unique_prefix}` — Ein eindeutiges Präfix mit 33 Zeichen, das Dateinamenskonflikte verhindert, beispielsweise `"f2/d3eeeb67479f11f8b091b04f6181ad"`.\
  Beachten Sie den `/` im Präfix. Wenn Sie `${unique_prefix}` beispielsweise im Parameter `path`von [🤖/s3/store](/docs/robots/s3-store.md) verwenden, werden Unterverzeichnisse in Ihrem S3-Bucket erstellt. Dies kann erwünscht sein oder nicht. Verwenden Sie `${file.id}`, wenn Sie ein eindeutiges Präfix ohne Schrägstriche benötigen.
* `${unique_original_prefix}` — Dies ähnelt `${unique_prefix}`. Der Unterschied besteht darin, dass zwei verschiedene Encoding-Ergebnisse derselben hochgeladenen Datei (der Originaldatei) hier dasselbe Präfix erhalten.
* `${previous_step.name}` — Der Name des vorherigen Step, der die aktuelle Datei erzeugt hat.
* `${file.id}` — Die ID der verarbeiteten Datei. Sie ist eine UUIDv4 ohne Bindestriche.
* `${file.original_id}` — Die ID der Originaldatei, von der eine bestimmte Datei abgeleitet ist. Wenn Sie beispielsweise Dateien mit einem Import-Robot importieren und anschließend auf beliebige Weise codieren, entspricht `${file.original_id}` der Encoding-Ergebnisdateien der `${file.id}` der importierten Datei.
* `${file.original_name}` — Der Name der Originaldatei einschließlich Dateierweiterung, von der eine bestimmte Datei abgeleitet ist. Wenn Sie beispielsweise Dateien mit einem Import-Robot importieren und anschließend auf beliebige Weise codieren, entspricht `${file.original_name}` der Encoding-Ergebnisdateien dem Wert `${file.name}` der importierten Datei.
* `${file.original_basename}` — Der Basisname der Originaldatei, von der eine bestimmte Datei abgeleitet ist. Wenn Sie beispielsweise Dateien mit einem Import-Robot importieren und anschließend auf beliebige Weise codieren, entspricht `${file.original_basename}` der Encoding-Ergebnisdateien dem Wert `${file.basename}` der importierten Datei.
* `${file.original_path}` — Der Importpfad der Originaldatei, von der eine bestimmte Datei abgeleitet ist. Alle unsere Import-Robots setzen `${file.original_path}` entsprechend.\
  Wenn Sie beispielsweise [🤖/s3/import](/docs/robots/s3-import.md) verwenden, um Dateien aus Amazon S3 zu importieren, erhalten die importierten Dateien sowie alle davon abgeleiteten Dateien einen Wert für `file.original_path`, der dem Pfad zur Datei auf S3 ohne den Dateinamen entspricht. Lautet der S3-Pfad also `"path/to/file.txt"`, ist `file.original_path` gleich `"/path/to/"`. Lautet der Pfad`"/a.txt"`, ist `${file.original_path}` gleich `"/"`.\
  `file.original_path` enthält immer genügend Schrägstriche, damit Sie den Wert sicher im Parameter`path` Ihres Export-Step verwenden können, beispielsweise so: `"path": "${file.original_path}${file.name}"`. Dies ist praktisch, wenn Sie Dateien beispielsweise aus S3 importieren, auf beliebige Weise konvertieren und anschließend mit derselben oder einer ähnlichen Dateistruktur wieder auf S3 speichern möchten.
* `${file.name}` — Der Name der verarbeiteten Datei einschließlich Dateierweiterung.
* `${file.url_name}` — Der als Slug aufbereitete Name der Datei.\
  Dateinamen werden transliteriert und bereinigt, um eine URL-sichere Version zu erzeugen. Nichtlateinische Zeichen werden in lateinische Entsprechungen umgewandelt (z. B. `café.jpg` → `cafe.jpg`, `бубу.mov` → `bubu.mov`), Leerzeichen und Satzzeichen werden durch Bindestriche ersetzt. Mehrere aufeinanderfolgende nicht unterscheidbare Zeichen können zu einem einzelnen Bindestrich zusammengefasst werden.

###### Warnung

Da nichtlateinische Zeichen in lateinische Entsprechungen transliteriert und andere komplexe Zeichen oder Sonderzeichen durch Bindestriche ersetzt werden, können Dateinamenskonflikte entstehen, die auf dem ursprünglichen Gerät einer Person nicht aufgetreten sind. Um dies zu vermeiden, verwenden Sie `${file.url_name}` immer zusammen mit `${unique_prefix}` oder `${file.md5hash}`.

* `${file.basename}` — Der Name der verarbeiteten Datei ohne Dateierweiterung. So können Sie Aktionen dynamisch *für jede Datei* statt für jede Assembly mit `fields` ausführen.
* `${file.url_basename}` — Der als Slug aufbereitete Basisname der Datei (der Dateiname ohne Dateierweiterung).\
  Dateinamen werden transliteriert und bereinigt, um eine URL-sichere Version zu erzeugen. Nichtlateinische Zeichen werden in lateinische Entsprechungen umgewandelt (z. B. `café.jpg` → `cafe.jpg`, `бубу.mov` → `bubu.mov`), Leerzeichen und Satzzeichen werden durch Bindestriche ersetzt. Mehrere aufeinanderfolgende nicht unterscheidbare Zeichen können zu einem einzelnen Bindestrich zusammengefasst werden.

###### Warnung

Da nichtlateinische Zeichen in lateinische Entsprechungen transliteriert und andere komplexe Zeichen oder Sonderzeichen durch Bindestriche ersetzt werden, können Dateinamenskonflikte entstehen, die auf dem ursprünglichen Gerät einer Person nicht aufgetreten sind. Um dies zu vermeiden, verwenden Sie `${file.url_basename}` immer zusammen mit `${unique_prefix}` oder `${file.md5hash}`.

* `${file.user_meta}` — Tus-Uploads, mit denen Sie Dateien zu Transloadit hochladen, können Metadatenwerte enthalten. Alle zusätzlich übermittelten Werte werden in `user_meta` gespeichert. Dabei handelt es sich um benutzerdefinierte Metadaten, die Sie selbst bereitstellen, nicht um den von Transloadit erkannten Dateityp oder MIME-Typ.
* `${file.ext}` — Die Dateierweiterung.
* `${file.size}` — Die Dateigröße in Byte.
* `${file.type}` — Eine allgemeine, von Transloadit erkannte und im Assembly Status JSON bereitgestellte Dateikategorie, beispielsweise `image`, `video`, `audio`, `pdf`, `office`, `xls`,`swf` oder `document`. Verwenden Sie diese Variable, wenn Sie eine grobe Kategorie oder Kompatibilität mit bestehenden Workflows benötigen. Für zuverlässige Inhaltsprüfungen sollten Sie`${file.mime}` bevorzugen.
* `${file.mime}` — Der von Transloadit erkannte MIME-Typ der Datei, üblicherweise ermittelt bei der serverseitigen Metadatenextraktion im normalen Upload-Ablauf. Er kann vom ursprünglich durch den Client oder Browser gemeldeten MIME-Typ abweichen. Bevorzugen Sie diese Variable für Verzweigungen nach Inhaltstyp und verwenden Sie nach Möglichkeit Übereinstimmungen mit MIME-Familien wie`image/*`, `video/*` oder `audio/*`.
* `${file.md5hash}` — Der MD5-Hash der Datei. Dieser Hash basiert auf dem Dateiinhalt, nicht nur auf dem Dateinamen.
* `${file.*}` — Jede Dateieigenschaft, die im endgültigen Ergebnis-Array verfügbar ist, beispielsweise`${file.meta.width}`. Nicht alle Metadaten-Schlüssel sind für alle Dateitypen verfügbar.
* `${fields.*}` — Die zusammen mit dem Upload übermittelten Felder.\
  Wenn Uppy beispielsweise bei der Übermittlung eines Formulars so konfiguriert wurde, dass`fields: ['myvar']` zulässig ist, und das Formular ein Tag wie`<input type="hidden" name="myvar" value="1" />` enthielt, würde `${fields.myvar}` den Wert `1`enthalten.\
  Alternativ können Felder auch wie folgt programmatisch ausgefüllt werden:\
  ![](/_next/static/media/copy.04p1cju9qekk_.svg?dpl=dpl_6ZskK4ZaqZ1GYVxrmc4Qz2KncJJA)

```json
{  
  "steps": {  
    "store": {  
      "use": "encoded",  
      "robot": "/s3/store",  
      "credentials": "YOUR_S3_CREDENTIALS_NAME",  
      "path": "${assembly.id}/${fields.subdir}/356"  
    }  
  },  
  "fields": {  
    "subdir": "bar"  
  }  
}  
```

Bei einem Konflikt haben aus Formularfeldern abgeleitete Variablen Vorrang vor Variablen, die aus dem Schlüssel `fields` abgeleitet wurden.

* `${Date.now()}` — Das aktuelle Datum und die aktuelle Uhrzeit, dargestellt als Anzahl der seit der UNIX-Epoche vergangenen Millisekunden. Diese ist als Mitternacht zu Beginn des 1. Januar 1970 UTC definiert. Technisch gesehen ist dies keine Variable, sondern verwendet die[dynamische Codeauswertung](/docs/topics/dynamic-evaluation.md).

## Beispiel für Assembly Variables

Angenommen, Ihnen gefällt der Speicherort Ihrer Dateien nicht. Standardmäßig achtet Transloadit sorgfältig darauf, nichts zu überschreiben. Alle [Export-Robots](/docs/robots.md#service-file-exporting/)verfügen über einen Parameter `path` mit dem Standardwert `"${unique_prefix}/${file.url_name}"`. Daraus entstehen Speicherorte wie:`"f2/d3eeeb67479f11f8b091b04f6181ad/my-file-name.png"`.

Wir könnten den Parameterwert beispielsweise in`"${previous_step.name}/${file.id}.${file.ext}"` ändern. Die Pfade würden dann wie folgt aussehen:`"video-step-name/a8d3eeeb67479f11f8b091b04f6181ad.png"`.

Nicht alle Assembly Variables sind gleich. Einige sind eindeutiger und eignen sich daher besser als alleinige Grundlage für den Speicherort. Hier finden Sie einige Beispiele, sortiert von weniger zu stärker eindeutig:

* `${file.ext}` ist bei vielen Dateien identisch
* `${file.url_name}` birgt insbesondere über verschiedene Personen und Zeiträume hinweg ein hohes Konfliktrisiko, beispielsweise: `avatar.jpg`
* `${previous_step.name}` ist für alle Dateien identisch, die Ergebnisse desselben Step sind
* `${assembly.id}` ist für alle Dateien innerhalb einer einzelnen Assembly **identisch**
* `${file.id}` und `${unique_prefix}` sind für jede Datei **eindeutig**

Wenn Assembly Variables für Ihren Anwendungsfall nicht genügend Flexibilität bieten, können Sie auch die[dynamische Codeausführung](/docs/topics/dynamic-evaluation.md) mit demRobot [/script/run](/docs/robots/script-run.md) verwenden. Damit können Sie JavaScript aus IhrenAssembly Instructions auswerten lassen.
