# Ergebnisdateien speichern

## Beispiel für Assembly Status JSON

Sehen wir uns das vollständige [Assembly Status JSON](/docs/api/assembly-status-response.md) an, das Sie erhalten, nachdem wir die Bildgrößenänderung aus[Meine erste App](/de/docs/getting-started/my-first-app.md) verarbeitet haben:

![](/_next/static/media/copy.04p1cju9qekk_.svg?dpl=dpl_6eiBuj4xKF4BavafxaGyWDmoxdxA)

```json
{
  "assembly_id": "7828446e5acd4aa996dce3455ec914e9",
  "ok": "ASSEMBLY_COMPLETED",
  "message": "The Assembly was successfully completed.",
  "warnings": [],
  "account_id": "4ce4fb3d9d1842b6ba5d6f3ccee4b066",
  "assembly_ssl_url": "https://api2-jenks.transloadit.com/assemblies/7828446e5acd4aa996dce3455ec914e9",
  "assembly_url": "http://api2.jenks.transloadit.com/assemblies/7828446e5acd4aa996dce3455ec914e9",
  "build_id": "339",
  "bytes_expected": 486608,
  "bytes_received": 486608,
  "bytes_usage": 1097155,
  "client_agent": null,
  "client_ip": null,
  "client_referer": null,
  "companion_url": "https://api2-jenks.transloadit.com/companion/",
  "executing_jobs": [],
  "execution_duration": 5.281,
  "execution_start": "2020/01/09 12:02:08 GMT",
  "expected_tus_uploads": 1,
  "fields": {},
  "finished_tus_uploads": 1,
  "has_dupe_jobs": false,
  "instance": "jenks.transloadit.com",
  "is_infinite": false,
  "jobs_queue_duration": 0.01,
  "last_job_completed": "2020/01/09 12:02:14 GMT",
  "merged_params": "{\"steps\":{\":original\":{\"robot\":\"/upload/handle\"},\"faces_detected\":{\"use\":\":original\",\"robot\":\"/image/facedetect\",\"crop\":true,\"faces\":\"max-confidence\",\"format\":\"preserve\",\"crop_padding\":\"10%\"},\"exported\":{\"use\":[\"faces_detected\",\":original\"],\"robot\":\"/s3/store\",\"credentials\":\"demo_s3_credentials\"}},\"auth\":{\"key\":\"****\",\"expires\":\"2020-01-10T12:02:05.826Z\"}}",
  "notify_duration": null,
  "notify_response_code": null,
  "notify_start": null,
  "notify_status": null,
  "notify_url": null,
  "params": "{\"steps\":{\":original\":{\"robot\":\"/upload/handle\"},\"faces_detected\":{\"use\":\":original\",\"robot\":\"/image/facedetect\",\"crop\":true,\"faces\":\"max-confidence\",\"format\":\"preserve\",\"crop_padding\":\"10%\"},\"exported\":{\"use\":[\"faces_detected\",\":original\"],\"robot\":\"/s3/store\",\"credentials\":\"demo_s3_credentials\"}},\"auth\":{\"key\":\"****\",\"expires\":\"2020-01-10T12:02:05.826Z\"}}",
  "parent_assembly_status": null,
  "parent_id": null,
  "queue_duration": 0.184,
  "running_jobs": [],
  "start_date": "2020/01/09 12:02:06 GMT",
  "started_jobs": [
    ":original:::original",
    "faces_detected:::original",
    "exported:::original",
    "exported::faces_detected"
  ],
  "started_tus_uploads": 1,
  "template": null,
  "template_id": null,
  "transloadit_client": "node-sdk:2.0.8",
  "tus_url": "https://api2-jenks.transloadit.com/resumable/files/",
  "upload_duration": 2.814,
  "upload_meta_data_extracted": true,
  "uppyserver_url": "https://api2-jenks.transloadit.com/companion/",
  "websocket_url": "https://api2-jenks.transloadit.com/ws20074",
  "uploads": [
    {
      "id": "a30bd0776e7f4ac3817b056d102e8219",
      "basename": "joe-gardner-149699",
      "ext": "jpg",
      "field": "file",
      "from_batch_import": false,
      "is_tus_file": true,
      "md5hash": "fb205cb04b6998fe7ba364f70227cfa1",
      "mime": "image/jpeg",
      "name": "joe-gardner-149699.jpg",
      "original_basename": "joe-gardner-149699",
      "original_id": "a30bd0776e7f4ac3817b056d102e8219",
      "original_md5hash": "fb205cb04b6998fe7ba364f70227cfa1",
      "original_name": "joe-gardner-149699.jpg",
      "original_path": "/",
      "size": 485784,
      "ssl_url": "https://s3.amazonaws.com/demos.transloadit.com/a3/0bd0776e7f4ac3817b056d102e8219/joe-gardner-149699.jpg",
      "tus_upload_url": "https://api2-jenks.transloadit.com/resumable/files/f95ba7eebf22e0ebadcf9b09a3a91c65+DRCJv78IeFDneTwnYb3pagc8Bqg7IwlRAFpW8e3i.f4RSPIZXEeaxdheZiTBBvJ0pAyjxL3.U5TvUqWytvkObgz6Bh55biPZwLqzIK_mwRbjGl0UREMrju1zfy8.OgTg",
      "type": "image",
      "url": "http://demos.transloadit.com.s3.amazonaws.com/a3/0bd0776e7f4ac3817b056d102e8219/joe-gardner-149699.jpg",
      "meta": {
        "aspect_ratio": "1.500",
        "average_color": "#b09d96",
        "colorspace": "RGB",
        "date_file_modified": "2020/01/09 12:02:08 GMT",
        "frame_count": 1,
        "has_clipping_path": false,
        "has_transparency": false,
        "height": 1667,
        "width": 2500
      }
    }
  ],
  "results": {
    ":original": [
      {
        "id": "a30bd0776e7f4ac3817b056d102e8219",
        "basename": "joe-gardner-149699",
        "cost": 97157,
        "execTime": 0.81,
        "ext": "jpg",
        "field": "file",
        "from_batch_import": false,
        "is_tus_file": false,
        "md5hash": "fb205cb04b6998fe7ba364f70227cfa1",
        "mime": "image/jpeg",
        "name": "joe-gardner-149699.jpg",
        "original_basename": "joe-gardner-149699",
        "original_id": "a30bd0776e7f4ac3817b056d102e8219",
        "original_md5hash": "fb205cb04b6998fe7ba364f70227cfa1",
        "original_name": "joe-gardner-149699.jpg",
        "original_path": "/",
        "queue": "live",
        "queueTime": 0.01,
        "size": 485784,
        "ssl_url": "https://s3.amazonaws.com/demos.transloadit.com/a3/0bd0776e7f4ac3817b056d102e8219/joe-gardner-149699.jpg",
        "tus_upload_url": null,
        "type": "image",
        "url": "http://demos.transloadit.com.s3.amazonaws.com/a3/0bd0776e7f4ac3817b056d102e8219/joe-gardner-149699.jpg",
        "meta": {
          "aspect_ratio": "1.500",
          "average_color": "#b09d96",
          "colorspace": "RGB",
          "date_file_modified": "2020/01/09 12:02:08 GMT",
          "frame_count": 1,
          "has_clipping_path": false,
          "has_transparency": false,
          "height": 1667,
          "width": 2500
        }
      }
    ],
    "faces_detected": [
      {
        "id": "b8d12f6c517541ca86bf50c537cedb27",
        "basename": "joe-gardner-149699",
        "cost": 627606,
        "execTime": 0.83,
        "ext": "jpg",
        "field": "file",
        "from_batch_import": false,
        "is_tus_file": false,
        "md5hash": "2a5cd917f4281b9438956e489c63dfd2",
        "mime": "image/jpeg",
        "name": "joe-gardner-149699.jpg",
        "original_basename": "joe-gardner-149699",
        "original_id": "a30bd0776e7f4ac3817b056d102e8219",
        "original_md5hash": "fb205cb04b6998fe7ba364f70227cfa1",
        "original_name": "joe-gardner-149699.jpg",
        "original_path": "/",
        "queue": "live",
        "queueTime": 0,
        "size": 141822,
        "ssl_url": "https://s3.amazonaws.com/demos.transloadit.com/b8/d12f6c517541ca86bf50c537cedb27/joe-gardner-149699.jpg",
        "tus_upload_url": null,
        "type": "image",
        "url": "http://demos.transloadit.com.s3.amazonaws.com/b8/d12f6c517541ca86bf50c537cedb27/joe-gardner-149699.jpg",
        "meta": {
          "aspect_ratio": "0.739",
          "average_color": "#8d654d",
          "colorspace": "RGB",
          "date_file_created": "2020/01/09 12:02:09 GMT",
          "date_file_modified": "2020/01/09 12:02:12 GMT",
          "faces": [
            {
              "confidence": 99.99,
              "height": 840,
              "width": 621,
              "x1": 981,
              "x2": 1550,
              "y1": 121,
              "y2": 891
            }
          ],
          "frame_count": 1,
          "has_clipping_path": false,
          "has_transparency": false,
          "height": 840,
          "width": 621
        }
      }
    ]
  }
}

```

Wie Sie sehen, stellt Transloadit die endgültigen Speicherorte und Metadaten für Folgendes bereit:

* **alle hochgeladenen Dateien** – ganz unten im Schlüssel `uploads`
* **alle erzeugten Ergebnisdateien** – im Schlüssel `results`

Jedes Dateiobjekt enthält Metadaten sowie eine `ssl_url`, die auf das Ergebnis verweist. Wenn Sie einen unserer [Export-Robots](/docs/robots.md#service-file-exporting/) verwendet haben, entsprechen diese Speicherorte dem von Ihnen angegebenen Storage, beispielsweise Ihrem S3-Bucket. Andernfalls ist der Speicherort eine temporäre URL, die**nach [24 Stunden](/docs/faq/temporary-purge.md) entfernt wird**.

###### Warnung

Temporäre URLs dienen ausschließlich dazu, Dateien einmalig in Ihren eigenen Storage herunterzuladen. Geben Sie diese URLs niemals an Endbenutzer weiter und verwenden Sie sie nicht in der Produktion. Beachten Sie die [Einschränkungen für temporären Storage](/docs/faq/temporary-purge.md)mit wichtigen Nutzungshinweisen.

Je nach Integration können Sie:

* die Ergebnisse lokal dort verarbeiten, wo Sie die Anfrage senden,
* die Ergebnisse [einem Formular hinzufügen und an Ihr Backend senden](https://uppy.io/docs/transloadit/)oder
* (mit Async Mode) Transloadit das[Assembly Status JSON](/docs/api/assembly-status-response.md) an Ihre `notify_url` senden lassen, um damit anschließend Einträge in Ihrer Datenbank zu speichern.

Ein Beispiel hierfür finden Sie auf der [Webhooks-Seite](/docs/topics/webhooks.md).

## Ergebnisdateien für Ihre Endbenutzer anzeigen

Nachdem Sie die Dateien in einem persistenten Storage und alle für Ihre App nützlichen Metadaten in Ihrer Datenbank gespeichert haben, können Sie sie Ihren Benutzern bereitstellen. In unserem Fall zeigen wir das zugeschnittene Bild wie folgt an:

![](/_next/static/media/copy.04p1cju9qekk_.svg?dpl=dpl_6eiBuj4xKF4BavafxaGyWDmoxdxA)

```html
<img
  alt="avatar"
  src="https://s3.amazonaws.com/demos.transloadit.com/7b/22df50590d11e8be51b7c2c7cc7e22/joe-gardner-149699.jpg"
/>

```

Bei Videos können Sie Player wie[HLS.js](https://github.com/video-dev/hls.js), [Plyr](https://plyr.io/) oder[indigo-player](https://matvp91.github.io/indigo-player/#/) verwenden, die auch[HTTP-Livestreaming](/docs/robots/video-adaptive.md) und[MPEG-DASH](/docs/robots/video-adaptive.md) unterstützen.

## Verlassen Sie sich beim Speichern von Ergebnissen der Dateiverarbeitung nicht auf deren Reihenfolge

Wenn Ihre Encoding-Ergebnisse fertig sind und Transloadit sie per POST an Ihre Ergebnis-URL oder die URL derAssembly Notification sendet, verlassen Sie sich bitte nicht auf die korrekte Reihenfolge der Ergebnisse.

Angenommen, Ihr Template enthält zweiSteps vom Typ [🤖/image/resize](/docs/robots/image-resize.md), die den Step `:original` mit `use` verwenden. Zum Beispiel:

![](/_next/static/media/copy.04p1cju9qekk_.svg?dpl=dpl_6eiBuj4xKF4BavafxaGyWDmoxdxA)

```json
{
  "steps": {
    "high": {
      "use": ":original",
      "robot": "/image/resize",
      "width": 500,
      "height": 500
    },
    "low": {
      "use": ":original",
      "robot": "/image/resize",
      "width": 200,
      "height": 200
    }
  }
}

```

Wenn Sie 30 Fotos mit diesem Template hochladen, enthält das resultierende JSON der Assembly zwei Ergebnis-Arrays:`"results" -> "high"` und `"results" -> "low"`. Die Reihenfolge der Bilder in diesen Arrays ist jedoch nicht identisch. Das erste Ergebnis in `"high"` könnte vom 15. hochgeladenen Foto abgeleitet sein, während das erste Ergebnis im Array `"low"` vom 10. hochgeladenen Foto stammen könnte.

Wenn Sie Encoding-Ergebnisse den zugehörigen Uploads zuordnen müssen – was wahrscheinlich der Fall ist –, gleichen Sie sie anhand der Eigenschaft `id` in den Einträgen des Arrays `"uploads"` und der Eigenschaft `original_id` in den Einträgen Ihrer verschiedenen Ergebnis-Arrays ab.

## Ursprünglich hochgeladene Dateien speichern

Wenn Sie nicht nur die codierten Ergebnisdateien, sondern auch die ursprünglich von Ihren Benutzern hochgeladenen Dateien speichern, können Sie diese später erneut in andere Formate codieren, wenn sich Ihre Anforderungen ändern. Wenn Sie sie nicht speichern, gehen sie dauerhaft verloren, da ein erneuter Upload durch Ihre Benutzer wahrscheinlich nicht infrage kommt.

## Alle Metadaten speichern

Beachten Sie außerdem, dass Assemblies nur temporär bestehen. Transloadit löscht Datensätze nach **90 Tagen**. Wenn Sie darin enthaltene Metadaten dauerhaft aufbewahren möchten, sollten Sie sie in Ihren Datenspeicher importieren.
