

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Hochladen und Kopieren von Objekten mit mehrteiligen Uploads in Amazon S3
<a name="mpuoverview"></a>

Der mehrteilige Upload ermöglicht es Ihnen, ein einzelnes Objekt als eine Reihe von Teilen in Amazon S3 hochzuladen. Jeder Teil ist ein zusammenhängender Teil der Daten des Objekts. Sie können diese Objektteile unabhängig und in beliebiger Reihenfolge hochladen. Für Uploads berechnet Ihr aktualisierter AWS Client automatisch eine Prüfsumme des Objekts und sendet sie zusammen mit der Größe des Objekts als Teil der Anfrage an Amazon S3. Wenn die Übertragung eines Teils fehlschlägt, können Sie das Teil erneut übertragen, ohne dass dies Auswirkungen auf andere Teile hat. Nachdem alle Teile Ihres Objekts hochgeladen wurden, fügt Amazon S3 diese Teile zusammen, um das Objekt zu erstellen. Es hat sich bewährt, den mehrteiligen Upload für Objekte mit einer Größe von 100 MB oder mehr zu verwenden, anstatt sie in einem einzigen Vorgang hochzuladen.

Die Nutzung mehrteiliger Uploads bietet die folgenden Vorteile:
+ **Verbesserter Durchsatz** – Sie können die Teile parallel hochladen, um den Durchsatz zu erhöhen. 
+ **Schnelle Wiederherstellung bei Netzwerkproblemen** – Die kleinere Teilegröße minimiert die Auswirkungen eines Neustarts eines fehlgeschlagenen Uploads aufgrund eines Netzwerkfehlers.
+ **Anhalten und Fortsetzen von Objekt-Uploads** – Sie können Objektteile mit der Zeit hochladen. Nachdem Sie einen mehrteiligen Upload initiiert haben, gibt es kein Ablaufdatum. Sie müssen den mehrteiligen Upload ausdrücklich abschließen oder abbrechen.
+ **Starten Sie einen Upload, bevor Sie die endgültige Objektgröße kennen** – Sie können ein Objekt hochladen, während Sie es noch erstellen. 

Sie sollten den mehrteiligen Upload wie folgt verwenden:
+ Wenn Sie große Objekte über ein stabiles Netzwerk mit hoher Bandbreite hochladen, können Sie einen mehrteiligen Upload verwenden, um die Nutzung der verfügbaren Bandbreite zu maximieren. Hierzu laden Sie Objektteile parallel hoch, um von einer Multi-Thread-Leistung zu profitieren.
+ Wenn Sie einen Upload über ein instabiles Netzwerk durchführen, verwenden Sie den mehrteiligen Upload, um die Ausfallsicherheit bei Netzwerkfehlern zu erhöhen, indem Sie einen Neustart des Uploads vermeiden. Wenn Sie mehrteilige Uploads verwenden, müssen Sie nur die Teile erneut hochladen, deren Upload unterbrochen wurde. Sie müssen nicht das gesamte Objekt von Anfang an neu hochladen.

**Anmerkung**  
Weitere Informationen zur Verwendung der Speicherklasse Amazon S3 Express One Zone mit Verzeichnis-Buckets finden Sie unter [S3 Express One Zone](directory-bucket-high-performance.md#s3-express-one-zone) und [Arbeiten mit Verzeichnis-Buckets](directory-buckets-overview.md). Weitere Informationen zur Verwendung mehrteiliger Uploads mit S3 Express One Zone und Verzeichnis-Buckets finden Sie unter [Verwenden von mehrteiligen Uploads mit Verzeichnis-Buckets](s3-express-using-multipart-upload.md).

## Mehrteiliger Upload-Prozess
<a name="mpu-process"></a>

Der mehrteilige Upload ist ein Prozess in drei Schritten: Sie beginnen den Upload, laden die Teile des Objekts hoch und schließen den mehrteiligen Upload ab, wenn alle Teile hochgeladen wurden. Nach dem vollständigen Eingang der Daten aus dem mehrteiligen Upload erstellt Amazon S3 das Objekt anhand der hochgeladenen Teile. Dann können Sie auf das Objekt wie auf jedes andere Objekt in Ihrem Bucket zugreifen. 

Sie können alle laufenden mehrteiligen Uploads auflisten oder eine Liste der Teile anfordern, die Sie für einen bestimmten Multipart-Upload hochgeladen haben. Alle Vorgänge werden in diesem Abschnitt erklärt.

**Initiieren des mehrteiligen Uploads**  
Wenn Sie eine Anforderung zum Initiieren eines mehrteiligen Uploads senden, müssen Sie einen Prüfsummentyp angeben. Amazon S3 gibt dann eine Antwort mit einer Upload-ID als eindeutige Kennung für Ihren mehrteiligen Upload zurück. Diese Upload-ID ist erforderlich, wenn Sie Teile hochladen, Teile auflisten, einen Upload abschließen oder einen Upload anhalten. Wenn Sie Metadaten bereitstellen möchten, die das hochzuladende Objekt beschreiben, müssen sie in der Anforderung auf Initiierung des mehrteiligen Uploads angegeben werden. Anonyme Benutzer können keine mehrteiligen Uploads initiieren.

**Teile hochladen**  
Beim Hochladen eines Teils müssen Sie zusätzlich zur Upload-ID eine Teilenummer angeben. Sie können jede Teilenummer zwischen 1 und 10.000 wählen. Die Teilenummer identifiziert eindeutig einen Teil und seine Position im Objekt, das Sie hochladen. Die von Ihnen gewählte Teilenummer muss nicht fortlaufend sein (möglich sind z. B. 1, 5 und 14). Wenn Sie einen neuen Teil mit derselben Teilenummer hochladen wie bereits einmal zuvor, wird der früher hochgeladene Teil überschrieben. 

Wenn Sie ein Teil hochladen, gibt Amazon S3 den Prüfsummenalgorithmus mit dem Prüfsummenwert für jeden Teil als Header in der Antwort zurück. Für jeden Upload eines Teils müssen Sie die Artikelnummer und den Wert aufzeichnen. ETag Sie müssen diese Werte in die spätere Anforderung einschließen, um den mehrteiligen Upload abzuschließen. Jedes Teil wird zum ETag Zeitpunkt des Uploads sein eigenes haben. Sobald der mehrteilige Upload jedoch abgeschlossen ist und alle Teile konsolidiert sind, gehören alle Teile ETag als Prüfsumme von Prüfsummen zu einem Teil zusammen.

**Wichtig**  
Nachdem Sie einen mehrteiligen Upload gestartet und einen oder mehrere Teile hochgeladen haben, müssen Sie den mehrteiligen Upload abschließen oder abbrechen, damit keine Gebühren für die Speicherung der hochgeladenen Teile anfallen. Erst *nach* dem Abschluss oder Abbruch eines mehrteiligen Uploads gibt Amazon S3 den Speicher für die Teile frei und stoppt die Berechnung von Gebühren für die Speicherung der Teile.  
Wenn Sie einen mehrteiligen Upload abbrechen, können Sie mit dieser Upload-ID keine Teile mehr hochladen. Wenn der mehrteilige Upload abgebrochen wird, während Teile hochgeladen werden, können diese Uploads auch nach dem Abbruch des Uploads erfolgreich abgeschlossen werden oder fehlschlagen. Um sicherzustellen, dass der von allen Teilen verbrauchte Speicherplatz freigegeben wird, dürfen Sie einen mehrteiligen Upload erst dann abbrechen, wenn alle Uploads abgeschlossen wurden.

**Abschließen eines mehrteiligen Uploads**  
Wenn Sie einen mehrteiligen Upload abschließen, erstellt Amazon S3 ein Objekt, indem die Teile in aufsteigender Reihenfolge auf Grundlage der Teilenummer verkettet werden. Wenn Sie Metadaten für das Objekt bei der *Initiierung des mehrteiligen Uploads* bereitgestellt haben, verknüpft Amazon S3 die Metadaten mit dem Objekt. Nach einer erfolgreich ausgeführten *Abschlussanforderung* sind die Teile nicht mehr vorhanden. 

Ihre *vollständige mehrteilige Upload-Anfrage* muss die Upload-ID und eine Liste mit Artikelnummern und den entsprechenden Werten enthalten. ETag Die Amazon S3 S3-Antwort enthält eine ETag , die die kombinierten Objektdaten eindeutig identifiziert. Dies ETag ist nicht unbedingt ein MD5 Hash der Objektdaten.

Wenn Sie während eines mehrteiligen Uploads eine vollständige Objektprüfsumme angeben, übergibt das AWS SDK die Prüfsumme an Amazon S3, und S3 validiert die Objektintegrität serverseitig und vergleicht sie mit dem empfangenen Wert. Anschließend speichert S3 das Objekt, wenn die Werte übereinstimmen. Wenn die beiden Werte nicht übereinstimmen, schlägt Amazon S3 mit einem `BadDigest`-Fehler fehl. Die Prüfsumme Ihres Objekts wird auch in Objektmetadaten gespeichert, die Sie später verwenden werden, um die Datenintegrität eines Objekts zu überprüfen. 

**Beispielaufrufe mehrteiliger Uploads**  
 Für dieses Beispiel nehmen wir an, dass Sie einen mehrteiligen Upload für eine 100-GB-Datei generieren. In diesem Fall hätten Sie die folgenden API-Aufrufe für den gesamten Prozess. Es würde insgesamt 1 002 API-Aufrufe geben. 
+ Ein `[CreateMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html)`-Aufruf zum Starten des Prozesses
+ 1 000 individuelle `[UploadPart](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html)`-Aufrufe, mit denen jeweils ein Teil von 100 MB für die Gesamtgröße von 100 GB hochgeladen wird
+ Ein `[CompleteMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html)`-Aufruf, um den Vorgang abzuschließen.

**Auflistungen mehrteiliger Uploads**  
Sie können alle Teile eines bestimmten Multipart-Uploads oder alle laufenden mehrteiligen Uploads auflisten. Die Operation für die Teileauflistung gibt die Teileinformationen zurück, die Sie für einen bestimmten mehrteiligen Upload hochgeladen haben. Für jeden Abruf einer Teileauflistung gibt Amazon S3 die Teileinformationen für einen angegebenen mehrteiligen Upload bis zu maximal 1.000 Teilen zurück. Wenn im mehrteiligen Upload mehr als 1 000 Teile vorhanden sind, müssen Sie eine Reihe von Teilauflistungsanforderungen senden, um alle Teile abzurufen. Beachten Sie, dass die zurückgegebene Teileauflistung keine Teile enthält, die noch nicht vollständig hochgeladen wurden. Bei Verwendung der Operation *Mehrteilige Uploads auflisten* können Sie eine Liste aller mehrteiligen Uploads erhalten, die sich in Bearbeitung befinden.

Ein mehrteiliger Upload in Verarbeitung ist ein Upload, den Sie gestartet haben, der aber noch nicht abgeschlossen ist oder abgebrochen wurde. Jeder Anforderung gibt bis zu 1.000 mehrteilige Uploads zurück. Wenn mehr als 1 000 mehrteilige Uploads vorhanden sind, müssen Sie zusätzliche Anforderungen senden, um die verbleibenden mehrteiligen Uploads abzurufen. Verwenden Sie die zurückgegebene Liste nur zur Überprüfung.

**Wichtig**  
Verwenden Sie das Ergebnis dieser Auflistung nicht, wenn Sie eine Anforderung für den *Abschluss eines mehrteiligen Uploads* senden. Pflegen Sie stattdessen Ihre eigene Liste mit den Artikelnummern, die Sie beim Hochladen von Teilen angegeben haben, und den entsprechenden ETag Werten, die Amazon S3 zurückgibt.

## Prüfsummen mit mehrteiligen Upload-Operationen
<a name="mpuchecksums"></a>

Wenn Sie ein Objekt auf Amazon S3 hochladen, können Sie einen Prüfsummenalgorithmus angeben, den Amazon S3 verwenden soll. Standardmäßig verwenden das AWS SDK und die S3-Konsole einen Algorithmus für alle Objekt-Uploads, den Sie überschreiben können. Wenn Sie ein älteres SDK verwenden und Ihr hochgeladenes Objekt keine angegebene Prüfsumme hat, verwendet Amazon S3 automatisch den CRC-64/NVME (`CRC64NVME`) Prüfsummenalgorithmus. (Dies ist auch die empfohlene Option für eine effiziente Überprüfung der Datenintegrität.) Bei Verwendung von CRC-64/NVME berechnet Amazon S3 die Prüfsumme des vollständigen Objekts, nachdem der mehrteilige oder einteilige Upload abgeschlossen ist. Der CRC-64/NVME-Prüfsummenalgorithmus wird verwendet, um entweder eine direkte Prüfsumme über das gesamte Objekt oder eine Prüfsumme über die Prüfsummen für jedes einzelne Teil zu berechnen.

Nachdem Sie ein Objekt mit dem Multipart-Upload in S3 hochgeladen haben, berechnet Amazon S3 den Prüfsummenwert für jeden Teil bzw. für das gesamte Objekt und speichert die Werte. Sie können die S3-API oder das AWS S3-SDK verwenden, um den Prüfsummenwert auf folgende Weise abzurufen:
+ Für einzelne Teile können Sie [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html) oder [https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html) verwenden. Wenn Sie die Prüfsummenwerte für einzelne Teile von mehrteiligen Uploads abrufen möchten, die noch in Bearbeitung sind, können Sie [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html) verwenden.
+ Für das gesamte Objekt können Sie [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) verwenden. Wenn Sie einen mehrteiligen Upload mit einer vollständigen Objektprüfsumme durchführen möchten, verwenden Sie [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload) und [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload), indem Sie den vollständigen Objektprüfsummentyp angeben. Um den Prüfsummenwert des gesamten Objekts zu überprüfen oder um zu überprüfen, welcher Prüfsummentyp beim mehrteiligen Upload verwendet wird, verwenden Sie [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html).

**Wichtig**  
Wenn Sie einen mehrteiligen Upload mit **Checksummen**verwenden, müssen die Teilenummern für jeden Teile-Upload (im mehrteiligen Upload) fortlaufende Teilenummern verwenden und mit 1 beginnen. Wenn Sie **Prüfsummen** verwenden und versuchen, eine mehrteilige Upload-Anforderung mit nicht aufeinanderfolgenden Teilenummern abzuschließen, generiert Amazon S3 einen `HTTP 500 Internal Server`-Fehler .

 Weitere Informationen zur Funktionsweise von Prüfsummen mit mehrteiligen Upload-Objekten finden Sie unter [Überprüfen der Objektintegrität in Amazon S3](checking-object-integrity.md).

Ein end-to-end Verfahren, das zeigt, wie ein Objekt mithilfe eines mehrteiligen Uploads mit einer zusätzlichen Prüfsumme hochgeladen wird, finden Sie unter. [Tutorial: Ein Objekt durch mehrteiligen Upload hochladen und seine Datenintegrität überprüfen](tutorial-s3-mpu-additional-checksums.md)

## Gleichzeitige mehrteilige Upload-Vorgänge
<a name="distributedmpupload"></a>

In einer verteilten Entwicklungsumgebung ist es für Ihre Anwendung möglich, mehrere Updates gleichzeitig für dasselbe Objekt zu initiieren. Ihre Anwendung kann möglicherweise mehrere Multipart-Uploads mit demselben Objektschlüssel initiieren. Für jeden dieser Uploads kann Ihre Anwendung Teile hochladen und eine Anfrage auf Abschluss des Uploads an Amazon S3 senden, um das Objekt zu erstellen. Wenn die Buckets die S3-Versioning aktiviert haben, wird beim Abschluss eines mehrteiligen Uploads immer eine neue Version erstellt. Wenn Sie mehrere mehrteilige Uploads initiieren, die denselben Objektschlüssel in einem Bucket mit aktivierter Versionsverwaltung verwenden, wird die aktuelle Version des Objekts davon bestimmt, welche Upload zuletzt gestartet wurde (`createdDate`).

Sie starten beispielsweise um 10:00 Uhr eine `CreateMultipartUpload`-Anfrage für ein Objekt. Anschließend reichen Sie um 11:00 Uhr eine zweite `CreateMultipartUpload`-Anfrage für dasselbe Objekt ein. Da die zweite Anfrage zuletzt eingereicht wurde, wird das mit der Anforderung um 11:00 Uhr hochgeladene Objekt zur aktuellen Version, auch wenn der erste Upload nach dem zweiten abgeschlossen wird. Für Buckets, bei denen die Versionsverwaltung nicht aktiviert ist, ist es möglich, dass jede andere Anfrage, die zwischen dem Zeitpunkt des Beginns des Multipart-Uploads und dessen Abschluss eingeht, Vorrang haben könnte.

Ein anderes Beispiel dafür, wann eine gleichzeitige mehrteilige Upload-Anforderung Vorrang haben kann, ist, wenn ein anderer Vorgang einen Schlüssel löscht, nachdem Sie einen mehrteiligen Upload mit diesem Schlüssel initiiert haben. Bevor Sie die Operation abschließen, könnte die Antwort für den vollständigen mehrteiligen Upload eine erfolgreiche Objekterstellung anzeigen, ohne dass Sie das Objekt jemals sehen. 

## Verhindern, dass beim mehrteiligen Upload Objekte mit identischen Schlüsselnamen hochgeladen werden
<a name="multipart-upload-objects-with-same-key-name"></a>

Sie können überprüfen, ob ein Objekt in Ihrem Bucket vorhanden ist, bevor Sie es mithilfe von bedingten Schreibvorgängen beim Hochladen erstellen. Dadurch kann verhindert werden, dass vorhandene Daten überschrieben werden. Durch bedingte Schreibvorgänge wird beim Hochladen überprüft, ob sich in Ihrem Bucket nicht bereits ein Objekt mit demselben Schlüsselnamen befindet.

Sie können bedingte Schreibvorgänge für [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)- oder [CompleteMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html)-Anfragen verwenden.

Weitere Informationen zu bedingten Anfragen finden Sie unter [Hinzufügen von Vorbedingungen zu S3-Vorgängen mit bedingten Anforderungen](conditional-requests.md).

## Mehrteiliger Upload und Preise
<a name="mpuploadpricing"></a>

Nachdem Sie einen mehrteiligen Upload gestartet haben, behält Amazon S3 alle Teile bei, bis Sie den Upload abschließen oder abbrechen. Während seiner gesamten Lebensdauer werden Ihnen der gesamte Speicher, die Bandbreite und die Anforderungen für diesen mehrteiligen Upload und die zugehörigen Teile in Rechnung gestellt. 

Diese Teile werden gemäß der Speicherklasse berechnet, die beim Hochladen der Teile angegeben wurde. Diese Teile werden Ihnen jedoch nicht in Rechnung gestellt, wenn sie in S3 Glacier Flexible Retrieval oder S3 Glacier Deep Archive hochgeladen werden. Teile eines laufenden mehrteiligen Uploads für eine PUT-Anfrage an die Speicherklasse S3 Glacier Flexible Retrieval werden bis zum Abschluss des Uploads als Staging-Speicher S3 Glacier Flexible Retrieval zu S3-Standardspeicherpreisen abgerechnet. Darüber hinaus werden sowohl `CreateMultipartUpload` als auch `UploadPart` zum S3-Standardtarif abgerechnet. Nur die `CompleteMultipartUpload`-Anforderung wird zum Tarif von S3 Glacier Flexible Retrieval abgerechnet. Entsprechend werden in Bearbeitung befindliche mehrteilige Teile für einen PUT in die Speicherklasse S3 Glacier Deep Archive als S3 Glacier Flexible Retrieval Staging Storage zu den S3-Standardspeicherpreisen in Rechnung gestellt, bis der Upload abgeschlossen ist. Nur die `CompleteMultipartUpload`-Anforderung wird zu S3 Glacier Deep Archive-Preisen in Rechnung gestellt.

Wenn Sie den mehrteiligen Upload abbrechen, löscht Amazon S3 Upload-Artefakte und alle Teile, die Sie hochgeladen haben. Diese Artefakte werden Ihnen nicht in Rechnung gestellt. Für das Löschen unvollständiger mehrteiliger Uploads fallen keine Gebühren für vorzeitiges Löschen an, unabhängig von der angegebenen Speicherklasse. Weitere Informationen zu Preisen finden Sie unter [Amazon-S3-Preise](https://aws.amazon.com/s3/pricing/).

**Anmerkung**  
Wir empfehlen, eine Lebenszyklusregel zu konfigurieren, durch die unvollständige mehrteilige Uploads nach einer bestimmten Anzahl von Tagen mit der Aktion `AbortIncompleteMultipartUpload` gelöscht werden, um Ihre Speicherkosten gering zu halten. Weitere Informationen zum Erstellen einer Lebenszyklusregel zum Löschen unvollständiger mehrteiliger Uploads finden Sie unter [Konfigurieren einer Bucket-Lebenszykluskonfiguration zum Löschen unvollständiger mehrteiliger Uploads](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpu-abort-incomplete-mpu-lifecycle-config.html).

## API-Unterstützung für mehrteilige Uploads
<a name="apisupportformpu"></a>

In den folgenden Abschnitten der *Amazon Simple Storage Service-API-Referenz* wird die REST-API für mehrteilige Uploads beschrieben. 

Eine exemplarische Vorgehensweise für mehrteilige Uploads, die AWS Lambda-Funktionen verwendet, finden Sie unter [Hochladen großer Objekte auf Amazon S3 mithilfe der mehrteiligen](https://aws.amazon.com/blogs/compute/uploading-large-objects-to-amazon-s3-using-multipart-upload-and-transfer-acceleration/) Upload- und Übertragungsbeschleunigung.
+ [Multipart-Upload erstellen](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html)
+ [Upload Part](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html)
+ [Teil hochladen (kopieren)](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html)
+ [Abschließen eines mehrteiligen Uploads](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html)
+ [Abort Multipart Upload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html)
+ [Teile auflisten](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html)
+ [List Multipart Uploads](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html)

## AWS Command Line Interface Unterstützung für mehrteiliges Hochladen
<a name="clisupportformpu"></a>

In den folgenden Themen werden die Vorgänge für den mehrteiligen Upload AWS Command Line Interface beschrieben. 
+ [Initiieren eines mehrteiligen Uploads](https://docs.aws.amazon.com/cli/latest/reference/s3api/create-multipart-upload.html)
+ [Upload Part](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html)
+ [Teil hochladen (kopieren)](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html)
+ [Abschließen eines mehrteiligen Uploads](https://docs.aws.amazon.com/cli/latest/reference/s3api/complete-multipart-upload.html)
+ [Abort Multipart Upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/abort-multipart-upload.html)
+ [Teile auflisten](https://docs.aws.amazon.com/cli/latest/reference/s3api/list-parts.html)
+ [List Multipart Uploads](https://docs.aws.amazon.com/cli/latest/reference/s3api/list-multipart-uploads.html)

## AWS SDK-Unterstützung für mehrteiligen Upload
<a name="sdksupportformpu"></a>



Sie können eine verwenden AWS SDKs , um ein Objekt in Teilen hochzuladen. Eine Liste der von der API AWS SDKs unterstützten Aktionen finden Sie unter:
+ [Multipart-Upload erstellen](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html)
+ [Upload Part](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html)
+ [Teil hochladen (kopieren)](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html)
+ [Abschließen eines mehrteiligen Uploads](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html)
+ [Abort Multipart Upload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html)
+ [Teile auflisten](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html)
+ [List Multipart Uploads](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html)

## API für mehrteilige Uploads und Berechtigungen
<a name="mpuAndPermissions"></a>

Sie müssen über die erforderlichen Berechtigungen verfügen, um die Multipart-Upload-Vorgänge zu verwenden. Sie können Zugriffskontrolllisten (ACLs), die Bucket-Richtlinie oder die Benutzerrichtlinie verwenden, um Einzelpersonen Berechtigungen zur Ausführung dieser Operationen zu gewähren. In der folgenden Tabelle sind die erforderlichen Berechtigungen für verschiedene mehrteilige Upload-Operationen aufgeführt ACLs, wenn Sie eine Bucket-Richtlinie oder eine Benutzerrichtlinie verwenden. 


| Action | Erforderliche Berechtigungen | 
| --- | --- | 
|  Multipart-Upload erstellen  |  Sie müssen die `s3:PutObject`-Aktion für ein Objekt ausführen können, um eine Anforderung für einen mehrteiligen Upload zu erstellen.  Der Bucket-Eigentümer kann anderen Prinzipalen erlauben, die Aktion `s3:PutObject` auszuführen.   | 
|  Initiieren eines mehrteiligen Uploads  |  Sie müssen die `s3:PutObject`-Aktion für ein Objekt ausführen können, um einen mehrteiligen Upload zu initiieren.  Der Bucket-Eigentümer kann anderen Prinzipalen erlauben, die Aktion `s3:PutObject` auszuführen.   | 
| Initiator | Containerelement, das identifiziert, wer den Multipart-Upload initiiert hat. Wenn es sich bei dem Initiator um einen handelt AWS-Konto, liefert dieses Element dieselben Informationen wie das Owner-Element. Wenn der Initiator ein IAM-Benutzer ist, stellt dieses Element den Benutzer-ARN und den Anzeigenamen bereit. | 
| Upload Part | Sie müssen die Aktion `s3:PutObject` für ein Objekt ausführen können, um einen Teil hochzuladen.  Der Bucket-Eigentümer muss dem Initiator erlauben, die Aktion `s3:PutObject` für ein Objekt auszuführen, damit der Initiator einen Teil für dieses Objekt hochladen kann. | 
| Teil hochladen (kopieren) | Sie müssen die Aktion `s3:PutObject` für ein Objekt ausführen können, um einen Teil hochzuladen. Da Sie einen Teil eines vorhandenen Objekts hochladen, müssen Sie die Berechtigung `s3:GetObject` für das Quellobjekt besitzen.  Damit der Initiator einen Teil eines Objekts hochladen kann, muss der Bucket-Besitzer dem Initiator eine Genehmigung für die Ausführung der Aktion `s3:PutObject` für das Objekt erteilen. | 
| Abschließen eines mehrteiligen Uploads | Sie müssen die Aktion `s3:PutObject` für ein Objekt ausführen können, um einen Multipart-Upload abzuschließen.  Der Bucket-Eigentümer muss dem Initiator erlauben, die Aktion `s3:PutObject` für ein Objekt auszuführen, damit der Initiator den mehrteiligen Upload für dieses Objekt abschließen kann. | 
| Mehrteiligen Upload abbrechen | Sie müssen die Aktion `s3:AbortMultipartUpload` ausführen dürfen, um einen mehrteiligen Upload abzubrechen.  Standardmäßig können der Bucket-Eigentümer und der Initiator des mehrteiligen Uploads diese Aktion als Teil von IAM- und S3-Bucket-Richtlinien ausführen. Wenn der Initiator ein IAM-Benutzer ist, darf der Benutzer diesen AWS-Konto mehrteiligen Upload auch beenden. Bei VPC-Endpunktrichtlinien erhält der Initiator des mehrteiligen Uploads nicht automatisch die Berechtigung zum Ausführen der `s3:AbortMultipartUpload`-Aktion Zusätzlich zu diesen Standardberechtigungen, kann der Bucket-Eigentümer anderen Prinzipalen erlauben, die Aktion `s3:AbortMultipartUpload` auszuführen. Der Bucket-Eigentümer kann jedem Prinzipal verbieten, die Aktion `s3:AbortMultipartUpload` auszuführen. | 
| Teile auflisten | Sie müssen die Aktion `s3:ListMultipartUploadParts` ausführen können, um Teileauflistungen in einem mehrteiligen Upload anzufragen. Standardmäßig kann der Bucket-Eigentümer Teileauflistungen von Multipart-Uploads in seinem Bucket anfordern. Der Initiator des mehrteiligen Uploads hat die Berechtigung, Teileauflistungen des spezifischen Multipart-Uploads aufzulisten. Wenn der Initiator des mehrteiligen Uploads ein IAM-Benutzer ist, hat der AWS-Konto kontrollierende IAM-Benutzer auch die Berechtigung, Teile dieses Uploads aufzulisten.  Zusätzlich zu diesen Standardberechtigungen, kann der Bucket-Eigentümer anderen Prinzipalen erlauben, die Aktion `s3:ListMultipartUploadParts` auszuführen. Der Bucket-Eigentümer kann jedem Prinzipal auch verbieten, die Aktion `s3:ListMultipartUploadParts` auszuführen. | 
| List Multipart Uploads | Sie müssen die Aktion `s3:ListBucketMultipartUploads` für einen Bucket ausführen können, um eine Multipart-Uploads-Auflistung für diesen Bucket anzufragen. Zusätzlich zu diesen Standardberechtigungen, kann der Bucket-Eigentümer anderen Prinzipalen erlauben, die Aktion `s3:ListBucketMultipartUploads` für ein Bucket auszuführen. | 
| AWS KMS Die damit verbundenen Berechtigungen verschlüsseln und entschlüsseln |  Um einen mehrteiligen Upload mit Verschlüsselung unter Verwendung eines AWS Key Management Service (AWS KMS) KMS-Schlüssels durchzuführen, muss der Anforderer über die folgenden Berechtigungen verfügen: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/AmazonS3/latest/userguide/mpuoverview.html)  Diese Berechtigungen sind erforderlich, da Amazon S3 Daten aus den verschlüsselten Teilen der Datei entschlüsseln und lesen muss, bevor es den Multipart-Upload vornehmen kann. Die `kms:Decrypt`-Genehmigung und die serverseitige Verschlüsselung mit vom Kunden bereitgestellten Verschlüsselungsschlüsseln sind ebenfalls erforderlich, um den Prüfsummenwert eines Objekts zu erhalten. Wenn Sie bei der Verwendung der [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html)-API nicht über diese erforderlichen Berechtigungen verfügen, wird das Objekt ohne Prüfsummenwert erstellt. Wenn Ihr IAM-Benutzer oder Ihre IAM-Rolle dem KMS-Schlüssel entspricht, überprüfen Sie, ob Sie über Berechtigungen sowohl für den Schlüssel AWS-Konto als auch für die IAM-Richtlinie verfügen. Wenn Ihr IAM-Benutzer oder Ihre Rolle zu einem anderen Konto als der KMS-Schlüssel gehört, müssen Sie über die Berechtigungen sowohl für die Schlüsselrichtlinie als auch für Ihren IAM-Benutzer oder Ihre Rolle verfügen.  | 
| SSE-C (serverseitige Verschlüsselung mit vom Kunden bereitgestellten Verschlüsselungsschlüsseln) | Wenn Sie die [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html)-API verwenden, müssen Sie SSE-C (serverseitige Verschlüsselung mit vom Kunden bereitgestellten Verschlüsselungsschlüsseln) angeben. Andernfalls wird Ihr Objekt ohne Prüfsumme erstellt und es wird kein Prüfsummenwert zurückgegeben.  | 

Weitere Informationen zur Beziehung zwischen ACL-Berechtigungen und Berechtigungen in Zugriffsrichtlinien finden Sie unter [Mapping der ACL-Berechtigungen und Zugriffsrichtlinienberechtigungen](acl-overview.md#acl-access-policy-permission-mapping). Weitere Informationen zu IAM-Benutzern, Gruppen, Rollen und bewährten Methoden finden Sie unter [Identitäten (Benutzer, Gruppen und Rollen)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html) im *IAM-Benutzerhandbuch*.

## Prüfsummen mit mehrteiligen Upload-Operationen
<a name="Checksums-mpu-operations"></a>

Es gibt drei Amazon S3 APIs , die verwendet werden, um den eigentlichen mehrteiligen Upload durchzuführen: [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html), und [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html). In der folgenden Tabelle ist angegeben, welche Prüfsummen-Header und Werte für die einzelnen Felder angegeben werden müssen: APIs


| Prüfsummenalgorithmus | Prüfsummentyp | `CreateMultipartUpload` | `UploadPart` | `CompleteMultipartUpoad` | 
| --- | --- | --- | --- | --- | 
| CRC-64/NVME (`CRC64NVME`) | Vollständiges Objekt | Erforderliche Header: `x-amz-checksum-algorithm` |  Optionale Header: `x-amz-checksum-crc64nvme`  |  Optionale Header: `x-amz-checksum-algorithm` `x-amz-crc64`  | 
| CRC-32 (`CRC32`) CRC 32-C (`CRC32C`) | Vollständiges Objekt |  Erforderliche Header: `x-amz-checksum-algorithm` `x-amz-checksum-type`  |  Optionale Header: `x-amz-checksum-crc64nvme`  |  Optionale Header: `x-amz-checksum-algorithm` `x-amz-crc32` `x-amz-crc32c`  | 
|  CRC-32 (`CRC32`) CRC-32C (`CRC32C`) SHA-1 () `SHA1` SHA-256 () `SHA256` | Zusammengesetzt |  Erforderliche Header: `x-amz-checksum-algorithm`  |  Erforderliche Header: `x-amz-checksum-crc32` `x-amz-checksum-crc32c` `x-amz-checksum-sha1` `x-amz-checksum-sha256`  |  Erforderliche Header: Alle Prüfsummen auf Teilebene müssen in der `CompleteMultiPartUpload`-Anforderung enthalten sein. Optionale Header: `x-amz-crc32` `x-amz-crc32c` `x-amz-sha1` `x-amz-sha256`  | 

**Topics**
+ [

## Mehrteiliger Upload-Prozess
](#mpu-process)
+ [

## Prüfsummen mit mehrteiligen Upload-Operationen
](#mpuchecksums)
+ [

## Gleichzeitige mehrteilige Upload-Vorgänge
](#distributedmpupload)
+ [

## Verhindern, dass beim mehrteiligen Upload Objekte mit identischen Schlüsselnamen hochgeladen werden
](#multipart-upload-objects-with-same-key-name)
+ [

## Mehrteiliger Upload und Preise
](#mpuploadpricing)
+ [

## API-Unterstützung für mehrteilige Uploads
](#apisupportformpu)
+ [

## AWS Command Line Interface Unterstützung für mehrteiliges Hochladen
](#clisupportformpu)
+ [

## AWS SDK-Unterstützung für mehrteiligen Upload
](#sdksupportformpu)
+ [

## API für mehrteilige Uploads und Berechtigungen
](#mpuAndPermissions)
+ [

## Prüfsummen mit mehrteiligen Upload-Operationen
](#Checksums-mpu-operations)
+ [

# Konfigurieren einer Bucket-Lebenszykluskonfiguration zum Löschen unvollständiger mehrteiliger Uploads
](mpu-abort-incomplete-mpu-lifecycle-config.md)
+ [

# Hochladen eines Objekts mit Multipart-Upload
](mpu-upload-object.md)
+ [

# Hochladen eines Verzeichnisses mithilfe der übergeordneten .NET-Klasse TransferUtility
](HLuploadDirDotNet.md)
+ [

# Auflisten von mehrteiligen Uploads
](list-mpu.md)
+ [

# Verfolgen eines mehrteiligen Uploads mit dem AWS SDKs
](track-mpu.md)
+ [

# Abbrechen eines mehrteiligen Uploads
](abort-mpu.md)
+ [

# Kopieren eines Objekts mit Multipart-Upload
](CopyingObjectsMPUapi.md)
+ [

# Tutorial: Ein Objekt durch mehrteiligen Upload hochladen und seine Datenintegrität überprüfen
](tutorial-s3-mpu-additional-checksums.md)
+ [

# EInschränkungen mehrteiliger Amazon-S3-Uploads
](qfacts.md)

# Konfigurieren einer Bucket-Lebenszykluskonfiguration zum Löschen unvollständiger mehrteiliger Uploads
<a name="mpu-abort-incomplete-mpu-lifecycle-config"></a>

Als bewährte Methode empfehlen wir Ihnen, eine Lebenszyklusregel mit der Aktion `AbortIncompleteMultipartUpload` zu konfigurieren, um Ihre Speicherkosten zu minimieren. Weitere Informationen zum Abbruch eines mehrteiligen Uploads finden Sie unter [Abbrechen eines mehrteiligen Uploads](abort-mpu.md).

Amazon S3 unterstützt eine Bucket-Lebenszyklusregel, mit der Sie Amazon S3 anweisen können, unvollständige mehrteilige Uploads abzubrechen, die nicht innerhalb einer bestimmten Anzahl von Tagen nach der Initiierung abgeschlossen werden. Wenn ein mehrteiliger Upload nicht innerhalb des angegebenen Zeitrahmens abgeschlossen wird, wird er für eine Abbruchoperation zugelassen. Amazon S3 bricht den mehrteiligen Upload dann ab und löscht alle diesem mehrteiligen Upload zugeordneten Teile. Diese Regel gilt sowohl für bestehende mehrteilige Uploads als auch für solche, die Sie später erstellen.

 Das folgende Beispiel zeigt eine Lebenszykluskonfiguration, die eine Regel mit der Aktion `AbortIncompleteMultipartUpload` spezifiziert. 

```
<LifecycleConfiguration>
    <Rule>
        <ID>sample-rule</ID>
        <Prefix></Prefix>
        <Status>Enabled</Status>
        <AbortIncompleteMultipartUpload>
          <DaysAfterInitiation>7</DaysAfterInitiation>
        </AbortIncompleteMultipartUpload>
    </Rule>
</LifecycleConfiguration>
```

In dem Beispiel gibt die Regel keinen Wert für das `Prefix`-Element ([Objektschlüsselnamen-Präfix](https://docs.aws.amazon.com/general/latest/gr/glos-chap.html#keyprefix)) an. Daher gilt die Regel für alle Objekte im Bucket, für die Sie mehrteilige Uploads initiiert haben. Alle mehrteiligen Uploads, die initiiert wurden und nicht innerhalb von sieben Tagen abgeschlossen wurden, werden für eine Abbruchoperation zugelassen. Die Abbruchaktion hat keine Auswirkung auf abgeschlossene mehrteilige Uploads.

Weitere Informationen zur Bucket-Lebenszykluskonfiguration finden Sie unter [Verwalten des Lebenszyklus von Objekten](object-lifecycle-mgmt.md).

**Anmerkung**  
Wenn der mehrteilige Upload innerhalb der in der Regel angegebenen Anzahl von Tagen abgeschlossen wurde, gilt die Lebenszyklusaktion `AbortIncompleteMultipartUpload` nicht (das heißt, Amazon S3 führt keine Aktion aus). Außerdem gilt diese Aktion nicht für Objekte. Durch diese Lebenszyklus-Aktion werden keine Objekte gelöscht. Darüber hinaus fallen keine Gebühren für das vorzeitige Löschen für den S3-Lebenszyklus an, wenn Sie Teile von unvollständigen mehrteiligen Uploads entfernen.

## Verwenden der S3-Konsole
<a name="mpu-abort-incomplete-mpu-lifecycle-config-console"></a>

Um unvollständige mehrteilige Uploads automatisch zu verwalten, können Sie die S3-Konsole verwenden, um eine Lebenszyklusrichtlinie zu erstellen und unvollständige mehrteilige Upload-Bytes aus dem Bucket nach einer bestimmten Anzahl von Tagen ablaufen zu lassen. Im folgenden Verfahren wird gezeigt, wie Sie eine Lebenszyklusregel hinzufügen, um unvollständige mehrteilige Uploads nach 7 Tagen zu löschen. Weitere Informationen über das Hinzufügen von Lebenszyklusregeln finden Sie unter [Einrichten einer S3-Lebenszykluskonfiguration für einen Bucket](how-to-set-lifecycle-configuration-intro.md).

**So fügen Sie eine Lebenszyklusregel hinzu, um unvollständige mehrteilige Uploads, die älter als 7 Tage sind, abzubrechen**

1. Melden Sie sich bei der an AWS-Managementkonsole und öffnen Sie die Amazon S3 S3-Konsole unter [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. Wählen Sie in der Liste **Buckets** den Namen des Buckets aus, für den Sie eine Lebenszyklusregel erstellen möchten.

1. Wählen Sie den Tab **Management (Verwaltung)** und dann die Option **Create lifecycle rule (Lebenszyklusregel erstellen)**.

1. Geben Sie unter **Lifecycle rule name (Name der Lebenszyklusregel)** einen Namen für Ihre Regel ein.

   Der Name muss innerhalb des Buckets eindeutig sein. 

1. Wählen Sie den Umfang der Lebenszyklusregel:
   + Wenn Sie eine Lebenszyklusregel für alle Objekte mit einem bestimmten Präfix erstellen möchten, wählen Sie **Limit the scope of this rule using one or more filters** (Den Geltungsbereich dieser Regel mithilfe eines oder mehrerer Filter einschränken) aus und geben Sie das Präfix im Feld **Prefix **(Präfix) ein.
   + Wenn Sie diese Lebenszyklusregel auf alle Objekte im Bucket anwenden möchten, wählen Sie **This rule applies to **all** objects in the bucket** (Diese Regel gilt für alle Objekte in dem Bucket) aus und klicken Sie auf **I acknowledge that this rule applies to all objects in the bucket** (Ich bestätige, dass diese Regel für alle Objekte in dem Bucket gilt).

1. Wählen Sie unter **Lifecycle rule actions** (Lebenszyklusregelaktionen) die Option **Delete expired object delete markers or incomplete multipart uploads** (Abgelaufene Objektlöschmarken oder unvollständige mehrteilige Uploads löschen) aus.

1. Wählen Sie unter **Delete expired object delete markers or incomplete multipart uploads** (Abgelaufene Objektlöschmarken oder unvollständige mehrteilige Uploads löschen) die Option **Delete incomplete multipart uploads** (Unvollständige mehrteilige Uploads löschen) aus.

1. Geben Sie im Feld **Number of days** (Anzahl der Tage) die Anzahl der Tage ein, nach denen unvollständige mehrteilige Uploads gelöscht werden sollen (in diesem Beispiel 7 Tage). 

1. Wählen Sie **Regel erstellen** aus.

## Verwenden Sie den AWS CLI
<a name="mpu-abort-incomplete-mpu-lifecycle-config-cli"></a>

Der folgende Befehl `put-bucket-lifecycle-configuration`AWS Command Line Interface (AWS CLI) fügt die Lebenszykluskonfiguration für den angegebenen Bucket hinzu. Zum Verwenden dieses Befehls ersetzen Sie `user input placeholders` durch Ihre Informationen.

```
aws s3api put-bucket-lifecycle-configuration  \
        --bucket amzn-s3-demo-bucket  \
        --lifecycle-configuration filename-containing-lifecycle-configuration
```

Das folgende Beispiel zeigt, wie Sie eine Lebenszyklusregel hinzufügen, um unvollständige mehrteilige Uploads mithilfe der AWS CLI abzubrechen. Es enthält ein Beispiel für eine JSON-Lebenszykluskonfiguration zum Abbrechen unvollständiger mehrteiliger Uploads, die älter als 7 Tage sind.

Die CLI-Befehle in diesem Beispiel können Sie verwenden, indem Sie die `user input placeholders` durch Ihre Informationen ersetzen.

**So fügen Sie eine Lebenszyklusregel hinzu, um unvollständige mehrteilige Uploads abzubrechen**

1. Richten Sie das ein AWS CLI. Anweisungen finden Sie unter [Entwickeln mit Amazon S3 mithilfe der AWS CLI](https://docs.aws.amazon.com/AmazonS3/latest/API/setup-aws-cli.html) in der *Amazon S3 S3-API-Referenz*. 

1. Speichern Sie das folgende Beispiel einer Lebenszyklus-Konfiguration in einer Datei (z. B. *`lifecycle.json`*``). Die Beispielkonfiguration gibt ein leeres Präfix an und gilt daher für alle Objekte im Bucket. Sie können ein Präfix angeben, um die Konfiguration auf eine Teilmenge von Objekten zu beschränken.

   ```
   {
       "Rules": [
           {
               "ID": "Test Rule",
               "Status": "Enabled",
               "Filter": {
                   "Prefix": ""
               },
               "AbortIncompleteMultipartUpload": {
                   "DaysAfterInitiation": 7
               }
           }
       ]
   }
   ```

1.  Führen Sie den folgenden CLI-Befehl aus, um die Lebenszyklus-Konfiguration in Ihrem Bucket festzulegen. 

   ```
   aws s3api put-bucket-lifecycle-configuration   \
   --bucket amzn-s3-demo-bucket  \
   --lifecycle-configuration file://lifecycle.json
   ```

1.  Um zu überprüfen, ob die Lebenszykluskonfiguration für Ihren Bucket festgelegt wurde, rufen Sie die Lebenszykluskonfiguration mit dem folgenden `get-bucket-lifecycle`-Befehl ab. 

   ```
   aws s3api get-bucket-lifecycle  \
   --bucket amzn-s3-demo-bucket
   ```

1.  Verwenden Sie zum Löschen der Lebenszykluskonfiguration den folgenden `delete-bucket-lifecycle`-Befehl. 

   ```
   aws s3api delete-bucket-lifecycle \
   --bucket amzn-s3-demo-bucket
   ```

# Hochladen eines Objekts mit Multipart-Upload
<a name="mpu-upload-object"></a>

Sie können den Multipart-Upload verwenden, um ein einzelnes Objekt programmgesteuert auf Amazon S3 hochzuladen. Jedes Objekt wird als Satz von Teilen hochgeladen. Jeder Teil ist ein zusammenhängender Teil der Daten des Objekts. Sie können diese Objektteile unabhängig und in beliebiger Reihenfolge hochladen. Wenn die Übertragung eines Teils fehlschlägt, können Sie das Teil erneut übertragen, ohne dass dies Auswirkungen auf andere Teile hat. Nachdem alle Teile Ihres Objekts hochgeladen sind, fügt Amazon S3 diese Teile zusammen und erstellt das Objekt. Anonyme Benutzer können keine mehrteiligen Uploads initiieren.

Ein end-to-end Verfahren zum Hochladen eines Objekts mit mehrteiligem Upload mit zusätzlicher Prüfsumme finden Sie unter. [Tutorial: Ein Objekt durch mehrteiligen Upload hochladen und seine Datenintegrität überprüfen](tutorial-s3-mpu-additional-checksums.md)

Im folgenden Abschnitt wird gezeigt, wie der mehrteilige Upload mit dem, und verwendet wird. AWS Command Line Interface AWS SDKs

## Verwenden der S3-Konsole
<a name="MultipartUploadConsole"></a>

Sie können beliebige Dateitypen – Bilder, Backups, Daten, Filme usw. – in einen S3-Bucket hochladen. Die maximale Größe einer Datei, die Sie über die Amazon-S3-Konsole hochladen können, ist 160 GB. Um eine Datei mit mehr als 160 GB hochzuladen, verwenden Sie die AWS Command Line Interface (AWS CLI) AWS SDKs, oder die Amazon S3 S3-REST-API.

Anweisungen zum Hochladen eines Objekts über die finden Sie AWS-Managementkonsole unter[Objekte hochladen](upload-objects.md).

## Mit dem AWS CLI
<a name="UsingCLImpUpload"></a>

Nachstehend werden Amazon-S3-Operationen für mehrteilige Uploads mithilfe von AWS CLI beschrieben. 
+ [Initiieren eines mehrteiligen Uploads](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/create-multipart-upload.html)
+ [Upload Part](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html)
+ [Teil hochladen (kopieren)](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html)
+ [Abschließen eines mehrteiligen Uploads](https://docs.aws.amazon.com/cli/latest/reference/s3api/complete-multipart-upload.html)
+ [Abort Multipart Upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/abort-multipart-upload.html)
+ [Teile auflisten](https://docs.aws.amazon.com/cli/latest/reference/s3api/list-parts.html)
+ [List Multipart Uploads](https://docs.aws.amazon.com/cli/latest/reference/s3api/list-multipart-uploads.html)

## Verwenden der REST-API
<a name="UsingRESTAPImpUpload"></a>

In den folgenden Abschnitten der *API-Referenz für Amazon Simple Storage Service* wird die REST-API für mehrteilige Uploads beschrieben. 
+ [Initiieren eines mehrteiligen Uploads](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadInitiate.html)
+ [Upload Part](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadUploadPart.html)
+ [Abschließen eines mehrteiligen Uploads](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadComplete.html)
+ [Mehrteiligen Upload abbrechen](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadAbort.html)
+ [Teile auflisten](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadListParts.html)
+ [List Multipart Uploads](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadListMPUpload.html)

## Mithilfe der AWS SDKs (High-Level-API)
<a name="multipart-upload-high-level"></a>

Einige bieten AWS SDKs eine High-Level-API, die den mehrteiligen Upload vereinfacht, indem sie die verschiedenen API-Operationen, die für den Abschluss eines mehrteiligen Uploads erforderlich sind, zu einem einzigen Vorgang kombiniert. Weitere Informationen finden Sie unter [Hochladen und Kopieren von Objekten mit mehrteiligen Uploads in Amazon S3](mpuoverview.md). 

Wenn Sie mehrteilige Uploads unterbrechen und fortsetzen müssen, die Teilegrößen während des Uploads ändern müssen oder die Größe der Daten nicht vorab kennen, verwenden Sie die Low-Level-API-Methoden. Die Low-Level-API-Methoden für mehrteilige Uploads bieten zusätzliche Funktionalitäten. Weitere Informationen finden Sie unter [Verwenden der AWS SDKs (Low-Level-API)](#mpu-upload-low-level). 

------
#### [ Java ]

Beispiele für die Durchführung eines mehrteiligen Uploads mit dem AWS SDK for Java finden Sie unter [Hochladen oder Herunterladen großer Dateien zu und von Amazon S3 mithilfe eines AWS SDK](https://docs.aws.amazon.com/AmazonS3/latest/API/s3_example_s3_Scenario_UsingLargeFiles_section.html) in der *Amazon S3 S3-API-Referenz.*

------
#### [ .NET ]

Um eine Datei in einen S3-Bucket hochzuladen, verwenden Sie die Klasse `TransferUtility`. Beim Hochladen von Daten aus einer Datei müssen Sie den Schlüsselnamen des Objekts angeben. Andernfalls verwendet die API den Dateinamen für den Schlüsselnamen. Beim Hochladen von Daten aus einem Stream müssen Sie den Schlüsselnamen des Objekts angeben.

Um fortschrittliche Upload-Optionen festzulegen – beispielsweise die Größe des Teil-Uploads, die Anzahl der Threads bei gleichzeitigem Hochladen von Upload-Teilen, Metadaten, die Speicherklasse oder die ACL –, verwenden Sie die Klasse `TransferUtilityUploadRequest`. 

**Anmerkung**  
Wenn Sie einen Stream für die Datenquelle verwenden, führt die `TransferUtility`-Klasse keine gleichzeitigen Uploads durch. 

Im folgenden C\$1-Beispiel wird eine Datei in mehreren Teilen in einen Amazon-S3-Bucket hochgeladen. Es veranschaulicht, wie Sie zahlreiche `TransferUtility.Upload`-Überladungen zum Hochladen einer Datei verwenden. Jeder nachfolgende Aufruf zum Hochladen ersetzt den vorherigen Upload. Informationen zum Einrichten und Ausführen der Codebeispiele finden Sie unter [Getting Started with the AWS SDK for .NET](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html) im *AWS SDK for .NET Developer Guide*. 

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Transfer;
using System;
using System.IO;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    class UploadFileMPUHighLevelAPITest
    {
        private const string bucketName = "*** provide bucket name ***";
        private const string keyName = "*** provide a name for the uploaded object ***";
        private const string filePath = "*** provide the full path name of the file to upload ***";
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
        private static IAmazonS3 s3Client;

        public static void Main()
        {
            s3Client = new AmazonS3Client(bucketRegion);
            UploadFileAsync().Wait();
        }

        private static async Task UploadFileAsync()
        {
            try
            {
                var fileTransferUtility =
                    new TransferUtility(s3Client);

                // Option 1. Upload a file. The file name is used as the object key name.
                await fileTransferUtility.UploadAsync(filePath, bucketName);
                Console.WriteLine("Upload 1 completed");

                // Option 2. Specify object key name explicitly.
                await fileTransferUtility.UploadAsync(filePath, bucketName, keyName);
                Console.WriteLine("Upload 2 completed");

                // Option 3. Upload data from a type of System.IO.Stream.
                using (var fileToUpload = 
                    new FileStream(filePath, FileMode.Open, FileAccess.Read))
                {
                    await fileTransferUtility.UploadAsync(fileToUpload,
                                               bucketName, keyName);
                }
                Console.WriteLine("Upload 3 completed");

                // Option 4. Specify advanced settings.
                var fileTransferUtilityRequest = new TransferUtilityUploadRequest
                {
                    BucketName = bucketName,
                    FilePath = filePath,
                    StorageClass = S3StorageClass.StandardInfrequentAccess,
                    PartSize = 6291456, // 6 MB.
                    Key = keyName,
                    CannedACL = S3CannedACL.PublicRead
                };
                fileTransferUtilityRequest.Metadata.Add("param1", "Value1");
                fileTransferUtilityRequest.Metadata.Add("param2", "Value2");

                await fileTransferUtility.UploadAsync(fileTransferUtilityRequest);
                Console.WriteLine("Upload 4 completed");
            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
            }

        }
    }
}
```

------
#### [ JavaScript ]

**Example**  
Laden Sie eine große Datei hoch.  

```
import { S3Client } from "@aws-sdk/client-s3";
import { Upload } from "@aws-sdk/lib-storage";

import {
  ProgressBar,
  logger,
} from "@aws-doc-sdk-examples/lib/utils/util-log.js";

const twentyFiveMB = 25 * 1024 * 1024;

export const createString = (size = twentyFiveMB) => {
  return "x".repeat(size);
};

/**
 * Create a 25MB file and upload it in parts to the specified
 * Amazon S3 bucket.
 * @param {{ bucketName: string, key: string }}
 */
export const main = async ({ bucketName, key }) => {
  const str = createString();
  const buffer = Buffer.from(str, "utf8");
  const progressBar = new ProgressBar({
    description: `Uploading "${key}" to "${bucketName}"`,
    barLength: 30,
  });

  try {
    const upload = new Upload({
      client: new S3Client({}),
      params: {
        Bucket: bucketName,
        Key: key,
        Body: buffer,
      },
    });

    upload.on("httpUploadProgress", ({ loaded, total }) => {
      progressBar.update({ current: loaded, total });
    });

    await upload.done();
  } catch (caught) {
    if (caught instanceof Error && caught.name === "AbortError") {
      logger.error(`Multipart upload was aborted. ${caught.message}`);
    } else {
      throw caught;
    }
  }
};
```

**Example**  
Laden Sie eine große Datei herunter.  

```
import { fileURLToPath } from "node:url";
import { GetObjectCommand, NoSuchKey, S3Client } from "@aws-sdk/client-s3";
import { createWriteStream, rmSync } from "node:fs";

const s3Client = new S3Client({});
const oneMB = 1024 * 1024;

export const getObjectRange = ({ bucket, key, start, end }) => {
  const command = new GetObjectCommand({
    Bucket: bucket,
    Key: key,
    Range: `bytes=${start}-${end}`,
  });

  return s3Client.send(command);
};

/**
 * @param {string | undefined} contentRange
 */
export const getRangeAndLength = (contentRange) => {
  const [range, length] = contentRange.split("/");
  const [start, end] = range.split("-");
  return {
    start: Number.parseInt(start),
    end: Number.parseInt(end),
    length: Number.parseInt(length),
  };
};

export const isComplete = ({ end, length }) => end === length - 1;

const downloadInChunks = async ({ bucket, key }) => {
  const writeStream = createWriteStream(
    fileURLToPath(new URL(`./${key}`, import.meta.url)),
  ).on("error", (err) => console.error(err));

  let rangeAndLength = { start: -1, end: -1, length: -1 };

  while (!isComplete(rangeAndLength)) {
    const { end } = rangeAndLength;
    const nextRange = { start: end + 1, end: end + oneMB };

    const { ContentRange, Body } = await getObjectRange({
      bucket,
      key,
      ...nextRange,
    });
    console.log(`Downloaded bytes ${nextRange.start} to ${nextRange.end}`);

    writeStream.write(await Body.transformToByteArray());
    rangeAndLength = getRangeAndLength(ContentRange);
  }
};

/**
 * Download a large object from and Amazon S3 bucket.
 *
 * When downloading a large file, you might want to break it down into
 * smaller pieces. Amazon S3 accepts a Range header to specify the start
 * and end of the byte range to be downloaded.
 *
 * @param {{ bucketName: string, key: string }}
 */
export const main = async ({ bucketName, key }) => {
  try {
    await downloadInChunks({
      bucket: bucketName,
      key: key,
    });
  } catch (caught) {
    if (caught instanceof NoSuchKey) {
      console.error(`Failed to download object. No such key "${key}".`);
      rmSync(key);
    }
  }
};
```

------
#### [ Go ]

Weitere Informationen zum Go-Codebeispiel für mehrteiligen Upload finden Sie unter [Hochladen oder Herunterladen großer Dateien mit einem AWS SDK zu und von Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/API/s3_example_s3_Scenario_UsingLargeFiles_section.html).

**Example**  
Laden Sie ein großes Objekt hoch, indem Sie einen Upload-Manager verwenden, um die Daten in Teile zu zerlegen und sie gleichzeitig hochzuladen.  

```
import (
	"bytes"
	"context"
	"errors"
	"fmt"
	"io"
	"log"
	"os"
	"time"

	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/feature/s3/manager"
	"github.com/aws/aws-sdk-go-v2/service/s3"
	"github.com/aws/aws-sdk-go-v2/service/s3/types"
	"github.com/aws/smithy-go"
)

// BucketBasics encapsulates the Amazon Simple Storage Service (Amazon S3) actions
// used in the examples.
// It contains S3Client, an Amazon S3 service client that is used to perform bucket
// and object actions.
type BucketBasics struct {
	S3Client *s3.Client
}
```

```
// UploadLargeObject uses an upload manager to upload data to an object in a bucket.
// The upload manager breaks large data into parts and uploads the parts concurrently.
func (basics BucketBasics) UploadLargeObject(ctx context.Context, bucketName string, objectKey string, largeObject []byte) error {
	largeBuffer := bytes.NewReader(largeObject)
	var partMiBs int64 = 10
	uploader := manager.NewUploader(basics.S3Client, func(u *manager.Uploader) {
		u.PartSize = partMiBs * 1024 * 1024
	})
	_, err := uploader.Upload(ctx, &s3.PutObjectInput{
		Bucket: aws.String(bucketName),
		Key:    aws.String(objectKey),
		Body:   largeBuffer,
	})
	if err != nil {
		var apiErr smithy.APIError
		if errors.As(err, &apiErr) && apiErr.ErrorCode() == "EntityTooLarge" {
			log.Printf("Error while uploading object to %s. The object is too large.\n"+
				"The maximum size for a multipart upload is 5TB.", bucketName)
		} else {
			log.Printf("Couldn't upload large object to %v:%v. Here's why: %v\n",
				bucketName, objectKey, err)
		}
	} else {
		err = s3.NewObjectExistsWaiter(basics.S3Client).Wait(
			ctx, &s3.HeadObjectInput{Bucket: aws.String(bucketName), Key: aws.String(objectKey)}, time.Minute)
		if err != nil {
			log.Printf("Failed attempt to wait for object %s to exist.\n", objectKey)
		}
	}

	return err
}
```

**Example**  
Laden Sie ein großes Objekt herunter, indem Sie einen Download-Manager verwenden, um die Daten in Teilen abzurufen und sie gleichzeitig herunterzuladen.  

```
// DownloadLargeObject uses a download manager to download an object from a bucket.
// The download manager gets the data in parts and writes them to a buffer until all of
// the data has been downloaded.
func (basics BucketBasics) DownloadLargeObject(ctx context.Context, bucketName string, objectKey string) ([]byte, error) {
	var partMiBs int64 = 10
	downloader := manager.NewDownloader(basics.S3Client, func(d *manager.Downloader) {
		d.PartSize = partMiBs * 1024 * 1024
	})
	buffer := manager.NewWriteAtBuffer([]byte{})
	_, err := downloader.Download(ctx, buffer, &s3.GetObjectInput{
		Bucket: aws.String(bucketName),
		Key:    aws.String(objectKey),
	})
	if err != nil {
		log.Printf("Couldn't download large object from %v:%v. Here's why: %v\n",
			bucketName, objectKey, err)
	}
	return buffer.Bytes(), err
}
```

------
#### [ PHP ]

In diesem Thema wird erklärt, wie Sie die `Aws\S3\Model\MultipartUpload\UploadBuilder` High-Level-Klasse aus dem AWS SDK für PHP für mehrteilige Datei-Uploads verwenden. Weitere Informationen zum AWS SDK for Ruby API finden Sie unter [AWS SDK for Ruby — Version 2.](https://docs.aws.amazon.com/sdkforruby/api/index.html)

Im folgenden PHP-Beispiel wird eine Datei in einen Amazon-S3-Bucket hochgeladen. Das Beispiel veranschaulicht, wie Sie Parameter für das `MultipartUploader`-Objekt festlegen. 

```
 require 'vendor/autoload.php';

use Aws\Exception\MultipartUploadException;
use Aws\S3\MultipartUploader;
use Aws\S3\S3Client;

$bucket = '*** Your Bucket Name ***';
$keyname = '*** Your Object Key ***';

$s3 = new S3Client([
    'version' => 'latest',
    'region'  => 'us-east-1'
]);

// Prepare the upload parameters.
$uploader = new MultipartUploader($s3, '/path/to/large/file.zip', [
    'bucket' => $bucket,
    'key'    => $keyname
]);

// Perform the upload.
try {
    $result = $uploader->upload();
    echo "Upload complete: {$result['ObjectURL']}" . PHP_EOL;
} catch (MultipartUploadException $e) {
    echo $e->getMessage() . PHP_EOL;
}
```

------
#### [ Python ]

Im folgenden Beispiel wird ein Objekt mithilfe der High-Level-Python-API für mehrteilige Uploads (der `TransferManager`-Klasse) hochgeladen. 

```
import sys
import threading

import boto3
from boto3.s3.transfer import TransferConfig


MB = 1024 * 1024
s3 = boto3.resource("s3")


class TransferCallback:
    """
    Handle callbacks from the transfer manager.

    The transfer manager periodically calls the __call__ method throughout
    the upload and download process so that it can take action, such as
    displaying progress to the user and collecting data about the transfer.
    """

    def __init__(self, target_size):
        self._target_size = target_size
        self._total_transferred = 0
        self._lock = threading.Lock()
        self.thread_info = {}

    def __call__(self, bytes_transferred):
        """
        The callback method that is called by the transfer manager.

        Display progress during file transfer and collect per-thread transfer
        data. This method can be called by multiple threads, so shared instance
        data is protected by a thread lock.
        """
        thread = threading.current_thread()
        with self._lock:
            self._total_transferred += bytes_transferred
            if thread.ident not in self.thread_info.keys():
                self.thread_info[thread.ident] = bytes_transferred
            else:
                self.thread_info[thread.ident] += bytes_transferred

            target = self._target_size * MB
            sys.stdout.write(
                f"\r{self._total_transferred} of {target} transferred "
                f"({(self._total_transferred / target) * 100:.2f}%)."
            )
            sys.stdout.flush()


def upload_with_default_configuration(
    local_file_path, bucket_name, object_key, file_size_mb
):
    """
    Upload a file from a local folder to an Amazon S3 bucket, using the default
    configuration.
    """
    transfer_callback = TransferCallback(file_size_mb)
    s3.Bucket(bucket_name).upload_file(
        local_file_path, object_key, Callback=transfer_callback
    )
    return transfer_callback.thread_info


def upload_with_chunksize_and_meta(
    local_file_path, bucket_name, object_key, file_size_mb, metadata=None
):
    """
    Upload a file from a local folder to an Amazon S3 bucket, setting a
    multipart chunk size and adding metadata to the Amazon S3 object.

    The multipart chunk size controls the size of the chunks of data that are
    sent in the request. A smaller chunk size typically results in the transfer
    manager using more threads for the upload.

    The metadata is a set of key-value pairs that are stored with the object
    in Amazon S3.
    """
    transfer_callback = TransferCallback(file_size_mb)

    config = TransferConfig(multipart_chunksize=1 * MB)
    extra_args = {"Metadata": metadata} if metadata else None
    s3.Bucket(bucket_name).upload_file(
        local_file_path,
        object_key,
        Config=config,
        ExtraArgs=extra_args,
        Callback=transfer_callback,
    )
    return transfer_callback.thread_info


def upload_with_high_threshold(local_file_path, bucket_name, object_key, file_size_mb):
    """
    Upload a file from a local folder to an Amazon S3 bucket, setting a
    multipart threshold larger than the size of the file.

    Setting a multipart threshold larger than the size of the file results
    in the transfer manager sending the file as a standard upload instead of
    a multipart upload.
    """
    transfer_callback = TransferCallback(file_size_mb)
    config = TransferConfig(multipart_threshold=file_size_mb * 2 * MB)
    s3.Bucket(bucket_name).upload_file(
        local_file_path, object_key, Config=config, Callback=transfer_callback
    )
    return transfer_callback.thread_info


def upload_with_sse(
    local_file_path, bucket_name, object_key, file_size_mb, sse_key=None
):
    """
    Upload a file from a local folder to an Amazon S3 bucket, adding server-side
    encryption with customer-provided encryption keys to the object.

    When this kind of encryption is specified, Amazon S3 encrypts the object
    at rest and allows downloads only when the expected encryption key is
    provided in the download request.
    """
    transfer_callback = TransferCallback(file_size_mb)
    if sse_key:
        extra_args = {"SSECustomerAlgorithm": "AES256", "SSECustomerKey": sse_key}
    else:
        extra_args = None
    s3.Bucket(bucket_name).upload_file(
        local_file_path, object_key, ExtraArgs=extra_args, Callback=transfer_callback
    )
    return transfer_callback.thread_info


def download_with_default_configuration(
    bucket_name, object_key, download_file_path, file_size_mb
):
    """
    Download a file from an Amazon S3 bucket to a local folder, using the
    default configuration.
    """
    transfer_callback = TransferCallback(file_size_mb)
    s3.Bucket(bucket_name).Object(object_key).download_file(
        download_file_path, Callback=transfer_callback
    )
    return transfer_callback.thread_info


def download_with_single_thread(
    bucket_name, object_key, download_file_path, file_size_mb
):
    """
    Download a file from an Amazon S3 bucket to a local folder, using a
    single thread.
    """
    transfer_callback = TransferCallback(file_size_mb)
    config = TransferConfig(use_threads=False)
    s3.Bucket(bucket_name).Object(object_key).download_file(
        download_file_path, Config=config, Callback=transfer_callback
    )
    return transfer_callback.thread_info


def download_with_high_threshold(
    bucket_name, object_key, download_file_path, file_size_mb
):
    """
    Download a file from an Amazon S3 bucket to a local folder, setting a
    multipart threshold larger than the size of the file.

    Setting a multipart threshold larger than the size of the file results
    in the transfer manager sending the file as a standard download instead
    of a multipart download.
    """
    transfer_callback = TransferCallback(file_size_mb)
    config = TransferConfig(multipart_threshold=file_size_mb * 2 * MB)
    s3.Bucket(bucket_name).Object(object_key).download_file(
        download_file_path, Config=config, Callback=transfer_callback
    )
    return transfer_callback.thread_info


def download_with_sse(
    bucket_name, object_key, download_file_path, file_size_mb, sse_key
):
    """
    Download a file from an Amazon S3 bucket to a local folder, adding a
    customer-provided encryption key to the request.

    When this kind of encryption is specified, Amazon S3 encrypts the object
    at rest and allows downloads only when the expected encryption key is
    provided in the download request.
    """
    transfer_callback = TransferCallback(file_size_mb)

    if sse_key:
        extra_args = {"SSECustomerAlgorithm": "AES256", "SSECustomerKey": sse_key}
    else:
        extra_args = None
    s3.Bucket(bucket_name).Object(object_key).download_file(
        download_file_path, ExtraArgs=extra_args, Callback=transfer_callback
    )
    return transfer_callback.thread_info
```

------

## Verwenden der AWS SDKs (Low-Level-API)
<a name="mpu-upload-low-level"></a>

Das AWS SDK stellt eine Low-Level-API bereit, die der Amazon S3 S3-REST-API für mehrteilige Uploads sehr ähnlich ist (siehe. [Hochladen und Kopieren von Objekten mit mehrteiligen Uploads in Amazon S3](mpuoverview.md) Verwenden Sie die Low-Level-API, wenn Sie mehrteilige Uploads anhalten und fortsetzen müssen, die Teilgrößen während des Uploads variieren müssen oder wenn Sie die Größe der Upload-Daten nicht im Voraus kennen. Wenn Sie diese Anforderungen nicht erfüllen, verwenden Sie die High-Level-API (siehe). [Mithilfe der AWS SDKs (High-Level-API)](#multipart-upload-high-level)

------
#### [ Java ]

Im folgenden Beispiel wird gezeigt, wie Sie mithilfe der Low-Level-Java-Klassen eine Datei hochladen. Es führt die folgenden Schritte aus:
+ Startet einen mehrteiligen Upload mit der Methode `AmazonS3Client.initiateMultipartUpload()` und übergibt ein `InitiateMultipartUploadRequest`-Objekt.
+ Speichern Sie die Upload-ID, die von der Methode `AmazonS3Client.initiateMultipartUpload()` zurückgegeben wird. Sie geben diese Upload-ID bei jeder nachfolgenden mehrteiligen Upload-Operation an.
+ Lädt die Teile des Objekts hoch. Für jedes Teil rufen Sie die Methode `AmazonS3Client.uploadPart()` auf. Sie stellen die Informationen für das Hochladen von Teilen in einem `UploadPartRequest`-Objekt bereit. 
+ Speichert für jeden Teil die Antwort der `AmazonS3Client.uploadPart()` Methode in einer Liste. ETag Sie verwenden die ETag Werte, um den mehrteiligen Upload abzuschließen.
+ Ruft die Methode `AmazonS3Client.completeMultipartUpload()` auf, um den mehrteiligen Upload fertigzustellen. 

**Example**  
Anweisungen zum Erstellen und Testen eines Arbeitsbeispiels finden Sie unter [Erste Schritte](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/getting-started.html) im AWS SDK für Java Entwicklerhandbuch.  

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class LowLevelMultipartUpload {

    public static void main(String[] args) throws IOException {
        Regions clientRegion = Regions.DEFAULT_REGION;
        String bucketName = "*** Bucket name ***";
        String keyName = "*** Key name ***";
        String filePath = "*** Path to file to upload ***";

        File file = new File(filePath);
        long contentLength = file.length();
        long partSize = 5 * 1024 * 1024; // Set part size to 5 MB.

        try {
            AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                    .withRegion(clientRegion)
                    .withCredentials(new ProfileCredentialsProvider())
                    .build();

            // Create a list of ETag objects. You retrieve ETags for each object part
            // uploaded,
            // then, after each individual part has been uploaded, pass the list of ETags to
            // the request to complete the upload.
            List<PartETag> partETags = new ArrayList<PartETag>();

            // Initiate the multipart upload.
            InitiateMultipartUploadRequest initRequest = new InitiateMultipartUploadRequest(bucketName, keyName);
            InitiateMultipartUploadResult initResponse = s3Client.initiateMultipartUpload(initRequest);

            // Upload the file parts.
            long filePosition = 0;
            for (int i = 1; filePosition < contentLength; i++) {
                // Because the last part could be less than 5 MB, adjust the part size as
                // needed.
                partSize = Math.min(partSize, (contentLength - filePosition));

                // Create the request to upload a part.
                UploadPartRequest uploadRequest = new UploadPartRequest()
                        .withBucketName(bucketName)
                        .withKey(keyName)
                        .withUploadId(initResponse.getUploadId())
                        .withPartNumber(i)
                        .withFileOffset(filePosition)
                        .withFile(file)
                        .withPartSize(partSize);

                // Upload the part and add the response's ETag to our list.
                UploadPartResult uploadResult = s3Client.uploadPart(uploadRequest);
                partETags.add(uploadResult.getPartETag());

                filePosition += partSize;
            }

            // Complete the multipart upload.
            CompleteMultipartUploadRequest compRequest = new CompleteMultipartUploadRequest(bucketName, keyName,
                    initResponse.getUploadId(), partETags);
            s3Client.completeMultipartUpload(compRequest);
        } catch (AmazonServiceException e) {
            // The call was transmitted successfully, but Amazon S3 couldn't process
            // it, so it returned an error response.
            e.printStackTrace();
        } catch (SdkClientException e) {
            // Amazon S3 couldn't be contacted for a response, or the client
            // couldn't parse the response from Amazon S3.
            e.printStackTrace();
        }
    }
}
```

------
#### [ .NET ]

Das folgende C\$1-Beispiel zeigt, wie Sie die Low-Level-API für SDK für .NET mehrteilige Uploads verwenden, um eine Datei in einen S3-Bucket hochzuladen. Weitere Informationen über mehrteilige Uploads zu Amazon S3 finden Sie unter [Hochladen und Kopieren von Objekten mit mehrteiligen Uploads in Amazon S3](mpuoverview.md).

**Anmerkung**  
Wenn Sie die SDK für .NET API zum Hochladen großer Objekte verwenden, kann es beim Schreiben von Daten in den Anforderungsstream zu einem Timeout kommen. Sie können mit `UploadPartRequest` ein explizites Timeout festlegen. 

In dem folgenden C\$1-Beispiel wird eine Datei mithilfe der Low-Level-API für mehrteilige Uploads in einen S3-Bucket hochgeladen. Informationen zum Einrichten und Ausführen der Codebeispiele finden Sie unter [Getting Started with the AWS SDK for .NET](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html) im *AWS SDK for .NET Developer Guide*. 

```
using Amazon;
using Amazon.Runtime;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    class UploadFileMPULowLevelAPITest
    {
        private const string bucketName = "*** provide bucket name ***";
        private const string keyName = "*** provide a name for the uploaded object ***";
        private const string filePath = "*** provide the full path name of the file to upload ***";
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
        private static IAmazonS3 s3Client;

        public static void Main()
        {
            s3Client = new AmazonS3Client(bucketRegion);
            Console.WriteLine("Uploading an object");
            UploadObjectAsync().Wait(); 
        }

        private static async Task UploadObjectAsync()
        {
            // Create list to store upload part responses.
            List<UploadPartResponse> uploadResponses = new List<UploadPartResponse>();

            // Setup information required to initiate the multipart upload.
            InitiateMultipartUploadRequest initiateRequest = new InitiateMultipartUploadRequest
            {
                BucketName = bucketName,
                Key = keyName
            };

            // Initiate the upload.
            InitiateMultipartUploadResponse initResponse =
                await s3Client.InitiateMultipartUploadAsync(initiateRequest);

            // Upload parts.
            long contentLength = new FileInfo(filePath).Length;
            long partSize = 5 * (long)Math.Pow(2, 20); // 5 MB

            try
            {
                Console.WriteLine("Uploading parts");
        
                long filePosition = 0;
                for (int i = 1; filePosition < contentLength; i++)
                {
                    UploadPartRequest uploadRequest = new UploadPartRequest
                        {
                            BucketName = bucketName,
                            Key = keyName,
                            UploadId = initResponse.UploadId,
                            PartNumber = i,
                            PartSize = partSize,
                            FilePosition = filePosition,
                            FilePath = filePath
                        };

                    // Track upload progress.
                    uploadRequest.StreamTransferProgress +=
                        new EventHandler<StreamTransferProgressArgs>(UploadPartProgressEventCallback);

                    // Upload a part and add the response to our list.
                    uploadResponses.Add(await s3Client.UploadPartAsync(uploadRequest));

                    filePosition += partSize;
                }

                // Setup to complete the upload.
                CompleteMultipartUploadRequest completeRequest = new CompleteMultipartUploadRequest
                    {
                        BucketName = bucketName,
                        Key = keyName,
                        UploadId = initResponse.UploadId
                     };
                completeRequest.AddPartETags(uploadResponses);

                // Complete the upload.
                CompleteMultipartUploadResponse completeUploadResponse =
                    await s3Client.CompleteMultipartUploadAsync(completeRequest);
            }
            catch (Exception exception)
            {
                Console.WriteLine("An AmazonS3Exception was thrown: { 0}", exception.Message);

                // Abort the upload.
                AbortMultipartUploadRequest abortMPURequest = new AbortMultipartUploadRequest
                {
                    BucketName = bucketName,
                    Key = keyName,
                    UploadId = initResponse.UploadId
                };
               await s3Client.AbortMultipartUploadAsync(abortMPURequest);
            }
        }
        public static void UploadPartProgressEventCallback(object sender, StreamTransferProgressArgs e)
        {
            // Process event. 
            Console.WriteLine("{0}/{1}", e.TransferredBytes, e.TotalBytes);
        }
    }
}
```

------
#### [ PHP ]

In diesem Thema wird gezeigt, wie Sie die `uploadPart` Low-Level-Methode aus Version 3 von verwenden AWS SDK für PHP , um eine Datei in mehreren Teilen hochzuladen. Weitere Informationen zum AWS SDK for Ruby API finden Sie unter [AWS SDK for Ruby — Version 2.](https://docs.aws.amazon.com/sdkforruby/api/index.html)

Das folgende PHP-Beispiel lädt eine Datei mit der PHP-Low-Level-API für mehrteilige Uploads zu einem Amazon-S3-Bucket hoch.

```
 require 'vendor/autoload.php';

use Aws\S3\Exception\S3Exception;
use Aws\S3\S3Client;

$bucket = '*** Your Bucket Name ***';
$keyname = '*** Your Object Key ***';
$filename = '*** Path to and Name of the File to Upload ***';

$s3 = new S3Client([
    'version' => 'latest',
    'region'  => 'us-east-1'
]);

$result = $s3->createMultipartUpload([
    'Bucket'       => $bucket,
    'Key'          => $keyname,
    'StorageClass' => 'REDUCED_REDUNDANCY',
    'Metadata'     => [
        'param1' => 'value 1',
        'param2' => 'value 2',
        'param3' => 'value 3'
    ]
]);
$uploadId = $result['UploadId'];

// Upload the file in parts.
try {
    $file = fopen($filename, 'r');
    $partNumber = 1;
    while (!feof($file)) {
        $result = $s3->uploadPart([
            'Bucket'     => $bucket,
            'Key'        => $keyname,
            'UploadId'   => $uploadId,
            'PartNumber' => $partNumber,
            'Body'       => fread($file, 5 * 1024 * 1024),
        ]);
        $parts['Parts'][$partNumber] = [
            'PartNumber' => $partNumber,
            'ETag' => $result['ETag'],
        ];
        $partNumber++;

        echo "Uploading part $partNumber of $filename." . PHP_EOL;
    }
    fclose($file);
} catch (S3Exception $e) {
    $result = $s3->abortMultipartUpload([
        'Bucket'   => $bucket,
        'Key'      => $keyname,
        'UploadId' => $uploadId
    ]);

    echo "Upload of $filename failed." . PHP_EOL;
}

// Complete the multipart upload.
$result = $s3->completeMultipartUpload([
    'Bucket'   => $bucket,
    'Key'      => $keyname,
    'UploadId' => $uploadId,
    'MultipartUpload'    => $parts,
]);
$url = $result['Location'];

echo "Uploaded $filename to $url." . PHP_EOL;
```

------

## Mit dem AWS SDK für Ruby
<a name="mpuoverview-ruby-sdk"></a>

Die AWS SDK für Ruby Version 3 unterstützt mehrteilige Amazon S3 S3-Uploads auf zwei Arten. Bei der ersten Option können Sie verwaltete Datei-Uploads verwenden. Weitere Informationen finden Sie unter [Uploading Files to Amazon S3](https://aws.amazon.com/blogs/developer/uploading-files-to-amazon-s3/) im *AWS -Entwickler-Blog*. Verwaltete Datei-Uploads sind die empfohlene Methode zum Hochladen von Dateien zu einem Bucket. Sie bieten die folgenden Vorteile:
+ Verwaltet mehrteilige Uploads von Objekten über 15 MB.
+ Dateien werden im Binärmodus korrekt geöffnet, um Codierungsprobleme zu vermeiden.
+ Verwendet mehrere Threads zum parallelen Hochladen von Teilen großer Objekte.

Alternativ können Sie die folgenden Multipart-Upload-Client-Vorgänge direkt verwenden:
+ [create\$1multipart\$1upload](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Client.html#create_multipart_upload-instance_method) – Initiiert einen mehrteiligen Upload und gibt eine Upload-ID zurück.
+ [upload\$1part](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Client.html#upload_part-instance_method) – Lädt einen Teil eines mehrteiligen Uploads hoch.
+ [upload\$1part\$1copy](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Client.html#upload_part_copy-instance_method) – Lädt einen Teil durch Kopieren von Daten aus einem vorhandenen Objekt hoch, das als Datenquelle dient.
+ [complete\$1multipart\$1upload](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Client.html#complete_multipart_upload-instance_method) – Schließt einen mehrteiligen Upload durch das Zusammenfügen zuvor hochgeladener Teile ab.
+ [abort\$1multipart\$1upload](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Client.html#abort_multipart_upload-instance_method) – Bricht einen mehrteiligen Upload ab.

# Hochladen eines Verzeichnisses mithilfe der übergeordneten .NET-Klasse TransferUtility
<a name="HLuploadDirDotNet"></a>

Mit der Klasse `TransferUtility` können Sie ein gesamtes Verzeichnis hochladen. Standardmäßig lädt die API nur die Dateien im Stammverzeichnis des angegebenen Verzeichnisses hoch. Sie können jedoch festlegen, dass die Dateien in allen Unterverzeichnissen rekursiv hochgeladen werden sollen. 

Um Dateien im angegebenen Verzeichnis basierend auf Filterkriterien anzugeben, geben Sie Filterausdrücke an. Wenn Sie z. B. nur die `PDF`-Dateien aus einem Verzeichnis hochladen möchten, geben Sie den Filterausdruck `"*.pdf"` ein. 

Wenn Sie Dateien aus einem Verzeichnis hochladen, geben Sie nicht die Schlüsselnamen der resultierenden Objekte an. Amazon S3 setzt die Schlüsselnamen aus dem Original-Dateipfad zusammen. Angenommen, ein Verzeichnis mit dem Namen `c:\myfolder` besitzt die folgende Verzeichnisstruktur:

**Example**  

```
1. C:\myfolder
2.       \a.txt
3.       \b.pdf
4.       \media\               
5.              An.mp3
```

Wenn Sie dieses Verzeichnis hochladen, verwendet Amazon S3 die folgenden Schlüsselnamen:

**Example**  

```
1. a.txt
2. b.pdf
3. media/An.mp3
```

**Example**  
Im folgenden C\$1-Beispiel wird ein Verzeichnis in einen Amazon-S3-Bucket hochgeladen. Es veranschaulicht, wie Sie zahlreiche `TransferUtility.UploadDirectory`-Überladungen zum Hochladen des Verzeichnisses verwenden. Jeder nachfolgende Aufruf zum Hochladen ersetzt den vorherigen Upload. Informationen zum Einrichten und Ausführen der Codebeispiele finden Sie unter [Getting Started with the AWS SDK for .NET](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html) im *AWS SDK for .NET Developer Guide*.   

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Transfer;
using System;
using System.IO;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    class UploadDirMPUHighLevelAPITest
    {
        private const string existingBucketName = "*** bucket name ***";
        private const string directoryPath = @"*** directory path ***";
        // The example uploads only .txt files.
        private const string wildCard = "*.txt";
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
        private static IAmazonS3 s3Client;
        static void Main()
        {
            s3Client = new AmazonS3Client(bucketRegion);
            UploadDirAsync().Wait();
        }

        private static async Task UploadDirAsync()
        {
            try
            {
                var directoryTransferUtility =
                    new TransferUtility(s3Client);

                // 1. Upload a directory.
                await directoryTransferUtility.UploadDirectoryAsync(directoryPath,
                    existingBucketName);
                Console.WriteLine("Upload statement 1 completed");

                // 2. Upload only the .txt files from a directory 
                //    and search recursively. 
                await directoryTransferUtility.UploadDirectoryAsync(
                                               directoryPath,
                                               existingBucketName,
                                               wildCard,
                                               SearchOption.AllDirectories);
                Console.WriteLine("Upload statement 2 completed");

                // 3. The same as Step 2 and some optional configuration. 
                //    Search recursively for .txt files to upload.
                var request = new TransferUtilityUploadDirectoryRequest
                {
                    BucketName = existingBucketName,
                    Directory = directoryPath,
                    SearchOption = SearchOption.AllDirectories,
                    SearchPattern = wildCard
                };

                await directoryTransferUtility.UploadDirectoryAsync(request);
                Console.WriteLine("Upload statement 3 completed");
            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine(
                        "Error encountered ***. Message:'{0}' when writing an object", e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine(
                    "Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
            }
        }
    }
}
```

# Auflisten von mehrteiligen Uploads
<a name="list-mpu"></a>

Sie können die AWS CLI REST-API oder verwenden AWS SDKs, um eine Liste der laufenden mehrteiligen Uploads in Amazon S3 abzurufen. Sie können den Multipart-Upload verwenden, um ein einzelnes Objekt programmgesteuert auf Amazon S3 hochzuladen. Bei mehrteiligen Uploads werden Objekte in Amazon S3 verschoben, indem jeweils ein Teil der Daten eines Objekts verschoben wird. Weitere allgemeine Informationen über mehrteilige Uploads finden Sie unter [Hochladen und Kopieren von Objekten mit mehrteiligen Uploads in Amazon S3](mpuoverview.md). 

Ein end-to-end Verfahren zum Hochladen eines Objekts mit mehrteiligem Upload mit zusätzlicher Prüfsumme finden Sie unter. [Tutorial: Ein Objekt durch mehrteiligen Upload hochladen und seine Datenintegrität überprüfen](tutorial-s3-mpu-additional-checksums.md)

Im folgenden Abschnitt wird gezeigt, wie Sie in Bearbeitung befindliche mehrteilige Uploads mit der AWS Command Line Interface, der Amazon S3 S3-REST-API und auflisten. AWS SDKs

## Auflisten mehrteiliger Uploads mit dem AWS CLI
<a name="list-mpu-cli"></a>

In den folgenden Abschnitten werden die Vorgänge zum Auflisten mehrteiliger Uploads AWS Command Line Interface beschrieben. 
+ [list-parts](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/list-parts.html) – listet die hochgeladenen Teile für einen bestimmten mehrteiligen Upload auf.
+ [list-multipart-uploads](https://docs.aws.amazon.com/cli/latest/reference/s3api/list-multipart-uploads.html)‐listet laufende mehrteilige Uploads auf.

# Auflisten von mehrteiligen Uploads mit der REST-API
<a name="list-mpu-rest"></a>

In den folgenden Abschnitten der *Amazon Simple Storage Service Reference* wird die REST-API für das Auflisten mehrteiliger Uploads beschrieben:
+ [ListParts](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html)‐listet die hochgeladenen Teile für einen bestimmten mehrteiligen Upload auf.
+ [ListMultipartUploads](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html)‐listet laufende mehrteilige Uploads auf.

## Auflisten mehrteiliger Uploads mithilfe des SDK (Low-Level-API) AWS
<a name="list-aws-sdk"></a>

------
#### [ Java ]

Um alle laufenden mehrteiligen Uploads in einem Bucket mithilfe des AWS SDK for Java aufzulisten, können Sie die Low-Level-API-Klassen verwenden, um:


**Auflistungsprozess von mehrteiligen Uploads mithilfe der Low-Level-API**  

|  |  | 
| --- |--- |
| 1 | Erstellen Sie eine Instance der `ListMultipartUploadsRequest`-Klasse und stellen Sie den Bucket-Namen bereit. | 
| 2 | Führen Sie die S3Client-`listMultipartUploads`-Methode aus. Die Methode gibt eine Instance der Klasse `ListMultipartUploadsResponse` zurück, die Ihnen Informationen über die laufenden mehrteiligen Uploads bereitstellt. | 

Beispiele dafür, wie Sie mehrteilige Uploads mit dem AWS SDK for Java auflisten können, finden Sie unter [Mehrteilige Uploads auflisten](https://docs.aws.amazon.com/AmazonS3/latest/API/s3_example_s3_ListMultipartUploads_section.html) in der *Amazon* S3 S3-API-Referenz.

------
#### [ .NET ]

Um alle aktuell ausgeführten mehrteiligen Uploads für einen bestimmten Bucket aufzulisten, verwenden Sie die Klasse `ListMultipartUploadsRequest` der Low-Level-API von SDK für .NET für mehrteilige Uploads. Die Methode `AmazonS3Client.ListMultipartUploads` gibt eine Instance der Klasse `ListMultipartUploadsResponse` zurück, die Informationen über die laufenden mehrteiligen Uploads bereitstellt. 

Ein laufender mehrteiliger Upload ist ein mehrteiliger Upload, der von der Anfrage für das Initiieren mehrteiliger Uploads initiiert, aber weder abgeschlossen noch abgebrochen wurde. Weitere Informationen über mehrteilige Amazon-S3-Uploads finden Sie unter [Hochladen und Kopieren von Objekten mit mehrteiligen Uploads in Amazon S3](mpuoverview.md).

Das folgende C\$1-Beispiel zeigt, wie Sie mithilfe von alle laufenden mehrteiligen SDK für .NET Uploads in einem Bucket auflisten können. Informationen zum Einrichten und Ausführen der Codebeispiele finden Sie unter [Getting Started with the AWS SDK for .NET](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html) im *AWS SDK for .NET Developer Guide*. 

```
ListMultipartUploadsRequest request = new ListMultipartUploadsRequest
{
	 BucketName = bucketName // Bucket receiving the uploads.
};

ListMultipartUploadsResponse response = await AmazonS3Client.ListMultipartUploadsAsync(request);
```

------
#### [ PHP ]

In diesem Thema wird gezeigt, wie Sie die Low-Level-API-Klassen aus Version 3 von verwenden, AWS SDK für PHP um alle laufenden mehrteiligen Uploads in einem Bucket aufzulisten. Weitere Informationen zum AWS SDK for Ruby API finden Sie unter [AWS SDK for Ruby — Version 2.](https://docs.aws.amazon.com/sdkforruby/api/index.html)

Das folgende PHP-Beispiel zeigt eine Auflistung aller in einem Bucket laufenden mehrteiligen Uploads.

```
 require 'vendor/autoload.php';

use Aws\S3\S3Client;

$bucket = '*** Your Bucket Name ***';

$s3 = new S3Client([
    'version' => 'latest',
    'region'  => 'us-east-1'
]);

// Retrieve a list of the current multipart uploads.
$result = $s3->listMultipartUploads([
    'Bucket' => $bucket
]);

// Write the list of uploads to the page.
print_r($result->toArray());
```

------

# Verfolgen eines mehrteiligen Uploads mit dem AWS SDKs
<a name="track-mpu"></a>

Sie können den Upload-Fortschritt eines Objekts in Amazon S3 mit einer Listen-Schnittstelle verfolgen. Die High-Level-API für mehrteilige Uploads bietet eine solche Listen-Schnittstelle namens `ProgressListener`. Fortschrittsereignisse treten periodisch auf und benachrichtigen den Listener, dass Bytes übertragen wurden. Weitere allgemeine Informationen über mehrteilige Uploads finden Sie unter [Hochladen und Kopieren von Objekten mit mehrteiligen Uploads in Amazon S3](mpuoverview.md).

Eine Anleitung zum end-to-end Hochladen eines Objekts mit mehrteiligem Upload mit zusätzlicher Prüfsumme finden Sie unter. [Tutorial: Ein Objekt durch mehrteiligen Upload hochladen und seine Datenintegrität überprüfen](tutorial-s3-mpu-additional-checksums.md)

Der folgende Abschnitt zeigt, wie Sie einen mehrteiligen Upload mit dem verfolgen können. AWS SDKs

------
#### [ Java ]

**Example**  
Der folgende Java-Code lädt eine Datei hoch und verwendet den `ExecutionInterceptor`, um den Upload-Fortschritt zu verfolgen. Anweisungen zum Erstellen und Testen eines funktionierenden Beispiels finden Sie unter [Erste Schritte](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html) im AWS SDK für Java 2.x-Entwicklerhandbuch.   

```
import java.nio.file.Paths;

import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
import software.amazon.awssdk.core.async.AsyncRequestBody;
import software.amazon.awssdk.core.interceptor.Context;
import software.amazon.awssdk.core.interceptor.ExecutionAttributes;
import software.amazon.awssdk.core.interceptor.ExecutionInterceptor;
import software.amazon.awssdk.services.s3.S3AsyncClient;
import software.amazon.awssdk.services.s3.model.PutObjectRequest;

public class TrackMPUProgressUsingHighLevelAPI {

    static class ProgressListener implements ExecutionInterceptor {
        private long transferredBytes = 0;

        @Override
        public void beforeTransmission(Context.BeforeTransmission context, ExecutionAttributes executionAttributes) {
            if (context.httpRequest().firstMatchingHeader("Content-Length").isPresent()) {
                String contentLength = context.httpRequest().firstMatchingHeader("Content-Length").get();
                long partSize = Long.parseLong(contentLength);
                transferredBytes += partSize;
                System.out.println("Transferred bytes: " + transferredBytes);
            }
        }
    }

    public static void main(String[] args) throws Exception {
        String existingBucketName = "*** Provide bucket name ***";
        String keyName = "*** Provide object key ***";
        String filePath = "*** file to upload ***";

        S3AsyncClient s3Client = S3AsyncClient.builder()
                .credentialsProvider(ProfileCredentialsProvider.create())
                .overrideConfiguration(c -> c.addExecutionInterceptor(new ProgressListener()))
                .build();

        // For more advanced uploads, you can create a request object
        // and supply additional request parameters (ex: progress listeners,
        // canned ACLs, etc.)
        PutObjectRequest request = PutObjectRequest.builder()
                .bucket(existingBucketName)
                .key(keyName)
                .build();

        AsyncRequestBody requestBody = AsyncRequestBody.fromFile(Paths.get(filePath));

        // You can ask the upload for its progress, or you can
        // add a ProgressListener to your request to receive notifications
        // when bytes are transferred.
        // S3AsyncClient processes all transfers asynchronously,
        // so this call will return immediately.
        var upload = s3Client.putObject(request, requestBody);

        try {
            // You can block and wait for the upload to finish
            upload.join();
        } catch (Exception exception) {
            System.out.println("Unable to upload file, upload aborted.");
            exception.printStackTrace();
        } finally {
            s3Client.close();
        }
    }
}
```

------
#### [ .NET ]

Das folgende C\$1-Beispiel lädt eine Datei unter Verwendung der Klasse `TransferUtility` in einen S3-Bucket hoch und verfolgt den Fortschritt des Uploads. Informationen zum Einrichten und Ausführen der Codebeispiele finden Sie unter [Getting Started with the AWS SDK for .NET](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html) im *AWS SDK for .NET Developer Guide*. 

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Transfer;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    class TrackMPUUsingHighLevelAPITest
    {
        private const string bucketName = "*** provide the bucket name ***";
        private const string keyName = "*** provide the name for the uploaded object ***";
        private const string filePath = " *** provide the full path name of the file to upload **";
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
        private static IAmazonS3 s3Client;


        public static void Main()
        {
            s3Client = new AmazonS3Client(bucketRegion);
            TrackMPUAsync().Wait();
        }

        private static async Task TrackMPUAsync()
        {
            try
            {
                var fileTransferUtility = new TransferUtility(s3Client);

                // Use TransferUtilityUploadRequest to configure options.
                // In this example we subscribe to an event.
                var uploadRequest =
                    new TransferUtilityUploadRequest
                    {
                        BucketName = bucketName,
                        FilePath = filePath,
                        Key = keyName
                    };

                uploadRequest.UploadProgressEvent +=
                    new EventHandler<UploadProgressArgs>
                        (uploadRequest_UploadPartProgressEvent);

                await fileTransferUtility.UploadAsync(uploadRequest);
                Console.WriteLine("Upload completed");
            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
            }
        }

        static void uploadRequest_UploadPartProgressEvent(object sender, UploadProgressArgs e)
        {
            // Process event.
            Console.WriteLine("{0}/{1}", e.TransferredBytes, e.TotalBytes);
        }
    }
}
```

------

# Abbrechen eines mehrteiligen Uploads
<a name="abort-mpu"></a>

Nachdem Sie einen mehrteiligen Upload initiiert haben, beginnen Sie mit dem Hochladen von Teilen. Amazon S3 speichert diese Teile und erstellt das Objekt erst, nachdem Sie alle Teile hochgeladen und eine Anforderung für den Abschluss des mehrteiligen Uploads gesendet haben. Nach dem Empfang der Anfrage auf Abschluss des Multipart-Uploads erzeugt Amazon S3 aus den Teilen ein Objekt. Wenn die Anforderung für den Abschluss des mehrteiligen Uploads nicht erfolgreich ist, fügt Amazon S3 die Teile nicht zusammen und erstellt daher auch kein Objekt. Wenn Sie einen mehrteiligen Upload nach dem Hochladen von Teilen nicht abschließen möchten, sollten Sie den mehrteiligen Upload abbrechen.

Ihnen wird der gesamte Speicher in Rechnung gestellt, der mit hochgeladenen Teilen verknüpft ist. Es wird empfohlen, den mehrteiligen Upload immer abzuschließen oder den mehrteiligen Upload anzuhalten, um hochgeladene Teile zu entfernen. Weitere Informationen zu Preisen erhalten Sie unter [Mehrteiliger Upload und Preise](mpuoverview.md#mpuploadpricing).

Sie können einen unvollständigen mehrteiligen Upload auch mithilfe einer Bucket-Lebenszykluskonfiguration beenden. Weitere Informationen finden Sie unter [Konfigurieren einer Bucket-Lebenszykluskonfiguration zum Löschen unvollständiger mehrteiliger Uploads](mpu-abort-incomplete-mpu-lifecycle-config.md).

Der folgende Abschnitt zeigt, wie Sie einen laufenden mehrteiligen Upload in Amazon S3 mithilfe der REST-API AWS Command Line Interface oder stoppen können. AWS SDKs

## Mit dem AWS CLI
<a name="abort-mpu-cli"></a>

Weitere Informationen zur Verwendung von AWS CLI zum Beenden eines mehrteiligen Uploads finden Sie [abort-multipart-upload](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/abort-multipart-upload.html)in der *AWS CLI Befehlsreferenz.*

## Verwenden der REST-API
<a name="abort-mpu-rest"></a>

Weitere Informationen zur Verwendung der REST-API zum Stoppen eines mehrteiligen Uploads finden Sie [AbortMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html)in der *Amazon Simple Storage Service API-Referenz.*

## Verwendung der AWS SDKs (High-Level-API)
<a name="abort-mpu-high-level"></a>

------
#### [ Java ]

Um laufende mehrteilige Uploads mithilfe des AWS SDK for Java zu beenden, können Sie Uploads abbrechen, die vor einem bestimmten Datum initiiert wurden und noch in Bearbeitung sind. Ein Upload wird als laufend betrachtet, nachdem Sie ihn initiiert haben und bis er abgeschlossen ist oder Sie ihn abbrechen.

Um mehrteilige Uploads zu stoppen, können Sie:


|  |  | 
| --- |--- |
| 1 | Erstellen Sie eine S3Client Instance. | 
| 2 | Verwenden Sie die Abbruchmethoden des Clients, indem Sie den Bucket-Namen und andere erforderliche Parameter übergeben. | 

**Anmerkung**  
Sie können auch einen bestimmten mehrteiligen Upload abbrechen. Weitere Informationen finden Sie unter [Verwenden der AWS SDKs (Low-Level-API)](#abort-mpu-low-level).

Beispiele dafür, wie Sie mehrteilige Uploads mit dem AWS SDK for Java [abbrechen können, finden Sie unter Abbrechen eines mehrteiligen Uploads](https://docs.aws.amazon.com/AmazonS3/latest/API/s3_example_s3_AbortMultipartUpload_section.html) in der *Amazon* S3 S3-API-Referenz.

------
#### [ .NET ]

Das folgende C\$1-Bespiel bricht alle laufenden mehrteiligen Uploads ab, die vor mehr als einer Woche für einen bestimmten Bucket initiiert wurden. Informationen zum Einrichten und Ausführen der Codebeispiele finden Sie unter [Getting Started with the AWS SDK for .NET](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html) im *AWS SDK for .NET Developer Guide*. 

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Transfer;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    class AbortMPUUsingHighLevelAPITest
    {
        private const string bucketName = "*** provide bucket name ***";
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
        private static IAmazonS3 s3Client;

        public static void Main()
        {
            s3Client = new AmazonS3Client(bucketRegion);
            AbortMPUAsync().Wait();
        }

        private static async Task AbortMPUAsync()
        {
            try
            {
                var transferUtility = new TransferUtility(s3Client);

                // Abort all in-progress uploads initiated before the specified date.
                await transferUtility.AbortMultipartUploadsAsync(
                    bucketName, DateTime.Now.AddDays(-7));
            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
            }
        } 
    }
}
```

**Anmerkung**  
Sie können auch einen bestimmten mehrteiligen Upload abbrechen. Weitere Informationen finden Sie unter [Verwenden der AWS SDKs (Low-Level-API)](#abort-mpu-low-level). 

------

## Verwenden der AWS SDKs (Low-Level-API)
<a name="abort-mpu-low-level"></a>

Durch Aufruf der Methode `AmazonS3.abortMultipartUpload` können Sie einen mehrteiligen Upload in Bearbeitung abbrechen. Diese Methode löscht alle Teile, die in Amazon S3 hochgeladen wurden, und gibt die Ressourcen frei. Sie müssen die Upload-ID, den Bucket-Namen und die Schlüsselnamen bereitstellen. Das folgende Java-Codebeispiel zeigt, wie ein laufender mehrteiliger Upload abgebrochen wird.

Um einen mehrteiligen Upload abzubrechen, stellen Sie die Upload-ID bereit sowie die Bucket- und Schlüsselnamen, die im Upload verwendet werden. Nachdem ein mehrteiliger Upload abgebrochen wurde, können Sie mit dieser Upload-ID keinen zusätzlichen Teile mehr hochladen. Weitere Informationen über mehrteilige Amazon-S3-Uploads finden Sie unter [Hochladen und Kopieren von Objekten mit mehrteiligen Uploads in Amazon S3](mpuoverview.md).

------
#### [ Java ]

Um einen bestimmten laufenden mehrteiligen Upload mithilfe des AWS SDK for Java zu stoppen, können Sie die Low-Level-API verwenden, um den Upload abzubrechen, indem Sie den Bucket-Namen, den Objektschlüssel und die Upload-ID angeben.

**Anmerkung**  
Anstatt einen bestimmten mehrteiligen Upload abzubrechen, können Sie alle mehrteiligen Uploads stoppen, die vor einem bestimmten Zeitpunkt initiiert wurden und noch in Bearbeitung sind. Diese Bereinigungsoperation ist praktisch, um alte mehrteilige Uploads abzubrechen, die Sie initiiert haben, aber die nicht abgeschlossen oder abgebrochen wurden. Weitere Informationen finden Sie unter [Verwendung der AWS SDKs (High-Level-API)](#abort-mpu-high-level).

Beispiele dafür, wie Sie einen bestimmten mehrteiligen Upload mit dem AWS SDK for Java [abbrechen können, finden Sie unter Abbrechen eines mehrteiligen Uploads](https://docs.aws.amazon.com/AmazonS3/latest/API/s3_example_s3_AbortMultipartUpload_section.html) in der *Amazon S3 S3-API-Referenz*.

------
#### [ .NET ]

Das folgende C\$1-Beispiel veranschaulicht, wie Sie einen mehrteiligen Upload abbrechen. Ein vollständiges C\$1-Beispiel mit dem folgenden Code finden Sie unter [Verwenden der AWS SDKs (Low-Level-API)](mpu-upload-object.md#mpu-upload-low-level).

```
AbortMultipartUploadRequest abortMPURequest = new AbortMultipartUploadRequest
{
    BucketName = existingBucketName,
    Key = keyName,
    UploadId = initResponse.UploadId
};
await AmazonS3Client.AbortMultipartUploadAsync(abortMPURequest);
```

Sie können auch alle laufenden mehrteiligen Uploads abbrechen, die vor einem bestimmten Zeitpunkt initiiert wurden. Diese Bereinigungsoperation ist praktisch, um mehrteilige Uploads abzubrechen, die nicht abgeschlossen oder abgebrochen wurden. Weitere Informationen finden Sie unter [Verwendung der AWS SDKs (High-Level-API)](#abort-mpu-high-level).

------
#### [ PHP ]

Dieses Beispiel zeigt, wie Sie eine Klasse aus Version 3 des AWS SDK für PHP für PHP verwenden, um einen laufenden mehrteiligen Upload abzubrechen. Weitere Informationen zum AWS SDK for Ruby API finden Sie unter [AWS SDK for Ruby — Version 2.](https://docs.aws.amazon.com/sdkforruby/api/index.html) Das Beispiel der Methode `abortMultipartUpload()`. 

Weitere Informationen zum AWS SDK for Ruby API finden Sie unter [AWS SDK for Ruby — Version 2.](https://docs.aws.amazon.com/sdkforruby/api/index.html)

```
 require 'vendor/autoload.php';

use Aws\S3\S3Client;

$bucket = '*** Your Bucket Name ***';
$keyname = '*** Your Object Key ***';
$uploadId = '*** Upload ID of upload to Abort ***';

$s3 = new S3Client([
    'version' => 'latest',
    'region'  => 'us-east-1'
]);

// Abort the multipart upload.
$s3->abortMultipartUpload([
    'Bucket'   => $bucket,
    'Key'      => $keyname,
    'UploadId' => $uploadId,
]);
```

------

# Kopieren eines Objekts mit Multipart-Upload
<a name="CopyingObjectsMPUapi"></a>

Mit dem mehrteiligen Upload können Sie Objekte als Satz von Teilen kopieren. Die Beispiele in diesem Abschnitt zeigen Ihnen, wie Sie Objekte mit mehr als 5 GB mit Hilfe des API für mehrteilige Uploads hochladen. Informationen zu mehrteiligen Uploads finden Sie unter [Hochladen und Kopieren von Objekten mit mehrteiligen Uploads in Amazon S3](mpuoverview.md).

Sie können in einem einzelnen Vorgang Objekte bis zu einer Größe von 5 GB kopieren, ohne die Multipart-Upload-API zu verwenden. Sie können Objekte mit weniger als 5 GB mithilfe der AWS-Managementkonsole, AWS CLI, REST-API oder kopieren AWS SDKs. Weitere Informationen finden Sie unter [Kopieren, Verschieben und Umbenennen von Objekten](copy-object.md). 

Ein end-to-end Verfahren zum Hochladen eines Objekts mit mehrteiligem Upload mit zusätzlicher Prüfsumme finden Sie unter. [Tutorial: Ein Objekt durch mehrteiligen Upload hochladen und seine Datenintegrität überprüfen](tutorial-s3-mpu-additional-checksums.md)

Im folgenden Abschnitt wird gezeigt, wie Sie ein Objekt mit mehrteiligem Upload mit der REST-API oder kopieren. AWS SDKs

## Verwenden der REST-API
<a name="CopyingObjctsUsingRESTMPUapi"></a>

In den folgenden Abschnitten der *Amazon Simple Storage Service-API-Referenz* wird die REST-API für mehrteilige Uploads beschrieben. Zum Kopieren eines vorhandenen Objekts verwenden Sie die Upload Part (Copy) API. Sie geben das Quellobjekt an, indem Sie den Anfrage-Header `x-amz-copy-source` in Ihre Anfrage aufnehmen. 
+ [Initiieren eines mehrteiligen Uploads](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadInitiate.html)
+ [Upload Part](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadUploadPart.html)
+ [Teil hochladen (kopieren)](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadUploadPartCopy.html)
+ [Abschließen eines mehrteiligen Uploads](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadComplete.html)
+ [Abort Multipart Upload](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadAbort.html)
+ [Teile auflisten](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadListParts.html)
+ [List Multipart Uploads](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadListMPUpload.html)

Sie können diese verwenden APIs , um Ihre eigenen REST-Anfragen zu stellen, oder Sie können eine der von SDKs uns bereitgestellten verwenden. Weitere Informationen zur Verwendung von Multipart Upload mit dem finden Sie AWS CLI unter[Mit dem AWS CLI](mpu-upload-object.md#UsingCLImpUpload). Weitere Informationen zu dem finden Sie SDKs unter[AWS SDK-Unterstützung für mehrteiligen Upload](mpuoverview.md#sdksupportformpu).

## Unter Verwendung des AWS SDKs
<a name="copy-object-mpu-sdks"></a>

Gehen Sie zum Kopieren eines Objekts mit der Low-Level-API wie folgt vor:
+ Initiieren eines mehrteiligen Uploads durch Aufrufen der Methode `AmazonS3Client.initiateMultipartUpload()`.
+ Speichern Sie die Upload-ID aus dem Antwortobjekt, das die Methode `AmazonS3Client.initiateMultipartUpload()` zurückgibt. Sie geben diese Upload-ID bei jeder Teiloperation mehrteiliger Uploads an.
+ Kopieren Sie alle Teile. Erstellen Sie für jeden Teil, den Sie kopieren müssen, eine neue Instance der Klasse `CopyPartRequest`. Geben Sie die teilspezifischen Informationen an, darunter Quell- und Zielbucket-Namen, Quell- und Ziel-Objektschlüssel, Upload-ID, Stelle des ersten und des letzten Byte des Teils sowie die Nummer des Teils. 
+ Speichern Sie die Antworten der `AmazonS3Client.copyPart()`-Methodenaufrufe. Jede Antwort enthält den Wert für `ETag` und die Teilenummer des hochgeladenen Teils. Sie benötigen diese Informationen, um den mehrteiligen Upload abzuschließen. 
+ Rufen Sie die Methode `AmazonS3Client.completeMultipartUpload()` auf, um die Kopieroperation abzuschließen. 

------
#### [ Java ]

Beispiele für das Kopieren von Objekten mithilfe des mehrteiligen Uploads mit dem AWS SDK for Java finden Sie unter [Kopieren eines Teils eines Objekts aus einem anderen Objekt](https://docs.aws.amazon.com/AmazonS3/latest/API/s3_example_s3_UploadPartCopy_section.html) in der *Amazon S3 S3-API-Referenz.*

------
#### [ .NET ]

Das folgende C\$1-Beispiel zeigt, wie Sie mithilfe von ein Amazon S3 S3-Objekt, das größer als 5 GB ist, von einem Quellspeicherort zu einem anderen kopieren, z. B. von einem Bucket in einen anderen. SDK für .NET Um Objekte zu kopieren, die kleiner als 5 GB sind, verwenden Sie das Kopierverfahren in einer einzigen Operation, das unter [Mit dem AWS SDKs](copy-object.md#CopyingObjectsUsingSDKs) beschrieben wird. Weitere Informationen über mehrteilige Amazon-S3-Uploads finden Sie unter [Hochladen und Kopieren von Objekten mit mehrteiligen Uploads in Amazon S3](mpuoverview.md).

Dieses Beispiel zeigt, wie ein Amazon S3 S3-Objekt, das größer als 5 GB ist, mithilfe der SDK für .NET mehrteiligen Upload-API von einem S3-Bucket in einen anderen kopiert wird.

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    class CopyObjectUsingMPUapiTest
    {
        private const string sourceBucket = "*** provide the name of the bucket with source object ***";
        private const string targetBucket = "*** provide the name of the bucket to copy the object to ***";
        private const string sourceObjectKey = "*** provide the name of object to copy ***";
        private const string targetObjectKey = "*** provide the name of the object copy ***";
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; 
        private static IAmazonS3 s3Client;

        public static void Main()
        {
            s3Client = new AmazonS3Client(bucketRegion);
            Console.WriteLine("Copying an object");
            MPUCopyObjectAsync().Wait();
        }
        private static async Task MPUCopyObjectAsync()
        {
            // Create a list to store the upload part responses.
            List<UploadPartResponse> uploadResponses = new List<UploadPartResponse>();
            List<CopyPartResponse> copyResponses = new List<CopyPartResponse>();

            // Setup information required to initiate the multipart upload.
            InitiateMultipartUploadRequest initiateRequest =
                new InitiateMultipartUploadRequest
                {
                    BucketName = targetBucket,
                    Key = targetObjectKey
                };

            // Initiate the upload.
            InitiateMultipartUploadResponse initResponse =
                await s3Client.InitiateMultipartUploadAsync(initiateRequest);

            // Save the upload ID.
            String uploadId = initResponse.UploadId;

            try
            {
                // Get the size of the object.
                GetObjectMetadataRequest metadataRequest = new GetObjectMetadataRequest
                {
                    BucketName = sourceBucket,
                    Key = sourceObjectKey
                };

                GetObjectMetadataResponse metadataResponse =
                    await s3Client.GetObjectMetadataAsync(metadataRequest);
                long objectSize = metadataResponse.ContentLength; // Length in bytes.

                // Copy the parts.
                long partSize = 5 * (long)Math.Pow(2, 20); // Part size is 5 MB.

                long bytePosition = 0;
                for (int i = 1; bytePosition < objectSize; i++)
                {
                    CopyPartRequest copyRequest = new CopyPartRequest
                    {
                        DestinationBucket = targetBucket,
                        DestinationKey = targetObjectKey,
                        SourceBucket = sourceBucket,
                        SourceKey = sourceObjectKey,
                        UploadId = uploadId,
                        FirstByte = bytePosition,
                        LastByte = bytePosition + partSize - 1 >= objectSize ? objectSize - 1 : bytePosition + partSize - 1,
                        PartNumber = i
                    };

                    copyResponses.Add(await s3Client.CopyPartAsync(copyRequest));

                    bytePosition += partSize;
                }

                // Set up to complete the copy.
                CompleteMultipartUploadRequest completeRequest =
                new CompleteMultipartUploadRequest
                {
                    BucketName = targetBucket,
                    Key = targetObjectKey,
                    UploadId = initResponse.UploadId
                };
                completeRequest.AddPartETags(copyResponses);

                // Complete the copy.
                CompleteMultipartUploadResponse completeUploadResponse = 
                    await s3Client.CompleteMultipartUploadAsync(completeRequest);
            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
            }
        }
    }
}
```

------

# Tutorial: Ein Objekt durch mehrteiligen Upload hochladen und seine Datenintegrität überprüfen
<a name="tutorial-s3-mpu-additional-checksums"></a>

 Mit dem mehrteiligen Upload können Sie ein einzelnes Objekt als Satz aus mehreren Teilen hochladen. Jeder Teil ist ein zusammenhängender Teil der Daten des Objekts. Sie können diese Objektteile unabhängig und in beliebiger Reihenfolge hochladen. Wenn die Übertragung eines Teils fehlschlägt, können Sie das Teil erneut übertragen, ohne dass dies Auswirkungen auf andere Teile hat. Nachdem alle Teile Ihres Objekts hochgeladen sind, fügt Amazon S3 diese Teile zusammen und erstellt das Objekt. Wenn Ihre Objektgröße 100 MB erreicht, sollten Sie in der Regel mehrteilige Uploads verwenden, anstatt das Objekt in einem einzigen Vorgang hochzuladen. Weitere Informationen über mehrteilige Uploads finden Sie unter [Hochladen und Kopieren von Objekten mit mehrteiligen Uploads in Amazon S3](mpuoverview.md). Informationen zu Beschränkungen im Zusammenhang mit mehrteiligen Uploads finden Sie unter [EInschränkungen mehrteiliger Amazon-S3-Uploads](qfacts.md).

 Sie können Prüfsummen verwenden, um sicherzustellen, dass Komponenten beim Kopieren nicht verändert werden. Das Durchführen einer Prüfsumme besteht darin, einen Algorithmus zu verwenden, um nacheinander jedes Byte in einer Datei zu durchlaufen. Amazon S3 bietet mehrere Prüfsummenoptionen zur Überprüfung der Integrität von Daten. Wir empfehlen Ihnen, diese Integritätsprüfungen als bewährte Methode für die Haltbarkeit durchzuführen und um sicherzustellen, dass jedes Byte unverändert übertragen wird. Amazon S3 unterstützt auch die folgenden Algorithmen: SHA-1, SHA-256 und C. CRC32 CRC32 Amazon S3 berechnet mit einem dieser Algorithmen einen zusätzlichen Prüfsummenwert und speichert ihn als Teil der Objektmetadaten. Weitere Informationen zu Prüfsummen finden Sie unter [Überprüfen der Objektintegrität in Amazon S3](checking-object-integrity.md).

**Ziel**  
 In diesem Tutorial erfahren Sie, wie Sie ein Objekt mithilfe eines mehrteiligen Uploads und einer zusätzlichen SHA-256-Prüfsumme über die AWS Befehlszeilenschnittstelle (CLI) auf Amazon S3 hochladen.AWS Sie erfahren auch, wie Sie die Datenintegrität des Objekts überprüfen, indem Sie den MD5 Hash und die SHA-256-Prüfsumme des hochgeladenen Objekts berechnen. 

**Topics**
+ [

## Voraussetzungen
](#mpu-prerequisites)
+ [

## Schritt 1: Erstellen Sie eine große Datei
](#create-large-file-step1)
+ [

## Schritt 2: Teilen Sie die Datei in mehrere Dateien auf
](#split-large-file-step2)
+ [

## Schritt 3: Erstellen Sie den mehrteiligen Upload mit einer zusätzlichen Prüfsumme
](#create-multipart-upload-step3)
+ [

## Schritt 4: Laden Sie die Teile Ihres mehrteiligen Uploads hoch
](#upload-parts-step4)
+ [

## Schritt 5: Listen Sie alle Teile Ihres mehrteiligen Uploads auf
](#list-parts-step5)
+ [

## Schritt 6: Schließen Sie den mehrteiligen Upload ab
](#complete-multipart-upload-step6)
+ [

## Schritt 7: Vergewissern Sie sich, dass das Objekt in Ihren Bucket hochgeladen wurde
](#confirm-upload-step7)
+ [

## Schritt 8: Überprüfen Sie die Objektintegrität mit einer Prüfsumme MD5
](#verify-object-integrity-step8)
+ [

## Schritt 9: Überprüfen Sie die Objektintegrität mit einer zusätzlichen Prüfsumme
](#verify-object-integrity-sha256-step9)
+ [

## Schritt 10: Bereinigen Ihrer Ressourcen
](#clean-up-step10)

## Voraussetzungen
<a name="mpu-prerequisites"></a>
+ Stellen Sie vor Beginn dieses Tutorials sicher, dass Sie Zugriff auf einen Amazon-S3-Bucket haben, in den Sie Uploads durchführen können. Weitere Informationen finden Sie unter [Erstellen eines Allzweck-Buckets](create-bucket-overview.md).
+  Sie müssen die AWS CLI installiert und konfiguriert haben. Falls Sie die AWS -CLI noch nicht installiert haben, finden Sie entsprechende Installationsanweisungen im *Benutzerhandbuch zu AWS Command Line Interface * unter [Installieren oder Aktualisieren der aktuellen Version der AWS CLI](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-install.html).
+ Alternativ können Sie AWS CLI-Befehle von der Konsole aus ausführen, indem Sie AWS CloudShell AWS CloudShell ist eine browserbasierte, vorauthentifizierte Shell, die Sie direkt von der aus starten können. AWS-Managementkonsole[Weitere Informationen finden Sie unter Was ist? CloudShell](https://docs.aws.amazon.com//cloudshell/latest/userguide/welcome.html) und [Erste Schritte mit AWS CloudShell](https://docs.aws.amazon.com//cloudshell/latest/userguide/getting-started.html) im *AWS CloudShell Benutzerhandbuch*.

## Schritt 1: Erstellen Sie eine große Datei
<a name="create-large-file-step1"></a>

Wenn Sie bereits eine Datei zum Hochladen bereit haben, können Sie die Datei für dieses Tutorial verwenden. Erstellen Sie andernfalls eine 15 MB große Datei mithilfe der folgenden Schritte. Informationen zu Beschränkungen im Zusammenhang mit mehrteiligen Uploads finden Sie unter [EInschränkungen mehrteiliger Amazon-S3-Uploads](qfacts.md).

**So erstellen Sie eine große Datei**

Führen Sie – je nachdem, welches Betriebssystem Sie verwenden – einen der folgenden Befehle zum Erstellen Ihrer Datei aus.

**Linux oder macOS**  
Öffnen Sie Ihr lokales Terminal und führen Sie den folgenden Befehl aus, um eine 15 MB große Datei zu erstellen:

```
dd if=/dev/urandom of=census-data.bin bs=1M count=15
```

Dieser Befehl erstellt eine mit zufälligen Bytes gefüllte Datei namens `census-data.bin` mit einer Größe von 15 MB.

**Windows**  
Öffnen Sie Ihr lokales Terminal und führen Sie den folgenden Befehl aus, um eine 15 MB große Datei zu erstellen:

```
fsutil file createnew census-data.bin 15728640
```

Dieser Befehl erstellt eine Datei namens `census-data.bin` mit einer Größe von 15 MB an beliebigen Daten (15728640 Bytes).

## Schritt 2: Teilen Sie die Datei in mehrere Dateien auf
<a name="split-large-file-step2"></a>

Um den mehrteiligen Upload durchzuführen, müssen Sie Ihre große Datei in kleinere Teile aufteilen. Sie können dann die kleineren Teile hochladen, indem Sie den mehrteiligen Upload-Prozess verwenden. In diesem Schritt wird gezeigt, wie Sie die in [Schritt 1](#create-large-file-step1) erstellte große Datei in kleinere Teile aufteilen. Im folgenden Beispiel wird eine 15 MB große Datei namens `census-data.bin` verwendet.

**So teilen Sie eine große Datei in Teile auf**

**Linux oder macOS**  
Verwenden Sie den Befehl `split`, um die große Datei in 5 MB große Teile aufzuteilen. Öffnen Sie Ihr Terminal und führen Sie Folgendes aus:

```
split -b 5M -d census-data.bin census-part
```

Dieser Befehl teilt `census-data.bin` in 5 MB große Teile mit dem Namen `census-part**` auf, wobei `**` ein numerisches Suffix ist, das bei `00` beginnt.

**Windows**  
Um die große Datei aufzuteilen, verwenden Sie PowerShell. Öffnen Sie [PowerShell](https://learn.microsoft.com/en-us/powershell/) und führen Sie das folgende Skript aus:

```
$inputFile = "census-data.bin"
$outputFilePrefix = "census-part"
$chunkSize = 5MB

$fs = [System.IO.File]::OpenRead($inputFile)
$buffer = New-Object byte[] $chunkSize
$fileNumber = 0

while ($fs.Position -lt $fs.Length) {
$bytesRead = $fs.Read($buffer, 0, $chunkSize)
$outputFile = "{0}{1:D2}" -f $outputFilePrefix, $fileNumber
$fileStream = [System.IO.File]::Create($outputFile)
$fileStream.Write($buffer, 0, $bytesRead)
$fileStream.Close()
$fileNumber++
}

$fs.Close()
```

Dieses PowerShell Skript liest die große Datei in Blöcken von 5 MB und schreibt jeden Abschnitt in eine neue Datei mit einem numerischen Suffix.

Nachdem Sie den entsprechenden Befehl ausgeführt haben, sollten Sie die Teile in dem Verzeichnis sehen, in dem Sie den Befehl ausgeführt haben. Jeder Teil hat ein Suffix, das seiner Artikelnummer entspricht, zum Beispiel:

```
census-part00 census-part01 census-part02
```

## Schritt 3: Erstellen Sie den mehrteiligen Upload mit einer zusätzlichen Prüfsumme
<a name="create-multipart-upload-step3"></a>

Um den mehrteiligen Upload-Vorgang zu starten, müssen Sie die mehrteilige Upload-Anfrage erstellen. In diesem Schritt wird der mehrteilige Upload initiiert und eine zusätzliche Prüfsumme für die Datenintegrität angegeben. Im folgenden Beispiel wird die SHA-256-Prüfsumme verwendet. Wenn Sie Metadaten bereitstellen möchten, die das Objekt beschreiben, das hochgeladen wird, müssen diese in der Anforderung auf Initiierung des mehrteiligen Uploads angegeben werden.

**Anmerkung**  
In diesem Schritt und den nachfolgenden Schritten verwendet dieses Tutorial den zusätzlichen SHA-256-Algorithmus. Sie können optional eine weitere zusätzliche Prüfsumme für diese Schritte verwenden, z. B. C oder SHA-1 CRC32. CRC32 Wenn Sie einen anderen Algorithmus verwenden, müssen Sie ihn in allen Schritten des Tutorials verwenden.

**So starten Sie den mehrteiligen Upload**

Verwenden Sie in Ihrem Terminal den folgenden `create-multipart-upload`-Befehl, um einen mehrteiligen Upload für Ihren Bucket zu starten. Ersetzen Sie `amzn-s3-demo-bucket1` durch den tatsächlichen Namen Ihres Buckets. Ersetzen Sie außerdem `census_data_file` durch den von Ihnen gewählten Dateinamen. Dieser Dateiname wird zum Objektschlüssel, wenn der Upload abgeschlossen ist.

```
aws s3api create-multipart-upload --bucket amzn-s3-demo-bucket1 --key 'census_data_file' --checksum-algorithm sha256
```

Wenn Ihre Anforderung erfolgreich ist, wird Ihnen eine JSON-Ausgabe wie die folgende angezeigt:

```
{
    "ServerSideEncryption": "AES256",
    "ChecksumAlgorithm": "SHA256",
    "Bucket": "amzn-s3-demo-bucket1",
    "Key": "census_data_file",
    "UploadId": "cNV6KCSNANFZapz1LUGPC5XwUVi1n6yUoIeSP138sNOKPeMhpKQRrbT9k0ePmgoOTCj9K83T4e2Gb5hQvNoNpCKqyb8m3.oyYgQNZD6FNJLBZluOIUyRE.qM5yhDTdhz"
}
```

**Anmerkung**  
Wenn Sie eine Anfrage zum Initiieren eines mehrteiligen Uploads senden, gibt Amazon S3 eine Antwort mit einer Upload-ID zurück, als eindeutige Kennung für den Multipart-Upload. Sie müssen diese Upload-ID immer angeben, wenn Sie Teile hochladen, die Teile auflisten, einen Upload abschließen oder einen Upload abbrechen. Sie müssen die Werte `UploadId`, `Key` und `Bucket` für spätere Schritte verwenden, also stellen Sie sicher, dass Sie diese speichern.  
Wenn Sie einen mehrteiligen Upload mit zusätzlichen Prüfsummen verwenden, müssen die mehrteiligen Teilenummern aufeinander folgen. Wenn Sie nicht aufeinander folgende Teilenummern verwenden, kann die `complete-multipart-upload`-Anfrage zu HTTP `500 Internal Server Error` führen.

## Schritt 4: Laden Sie die Teile Ihres mehrteiligen Uploads hoch
<a name="upload-parts-step4"></a>

In diesem Schritt laden Sie die Teile Ihres mehrteiligen Uploads in Ihren S3-Bucket hoch. Verwenden Sie den `upload-part`-Befehl, um jeden Teil einzeln hochzuladen. Dieser Vorgang erfordert die Angabe der Upload-ID, der Artikelnummer und der Datei, die hochgeladen werden soll, für jeden Teil.

**So laden Sie die Teile hoch**

1. Beim Hochladen eines Teils müssen Sie zusätzlich zur Upload-ID eine Teilenummer mithilfe des `--part-number`-Arguments angeben. Sie können jede Teilenummer zwischen 1 und 10.000 wählen. Die Teilenummer identifiziert eindeutig einen Teil und seine Position im Objekt, das Sie hochladen. Die von Ihnen gewählte Teilenummer muss fortlaufend sein (z. B. 1, 2 oder 3). Wenn Sie einen neuen Teil mit derselben Teilenummer hochladen wie bereits einmal zuvor, wird der früher hochgeladene Teil überschrieben.

1. Verwenden Sie den Befehl`upload-part`, um jeden Teil Ihres mehrteiligen Uploads hochzuladen. Die `--upload-id` ist dieselbe wie in der Ausgabe, die mit dem Befehl `create-multipart-upload` in [Schritt 3](#create-multipart-upload-step3) erstellt wurde. Verwenden Sie den folgenden Befehl, um den ersten Teil Ihrer Daten hochzuladen:

   ```
   aws s3api upload-part --bucket amzn-s3-demo-bucket1 --key 'census_data_file' --part-number 1 --body census-part00 --upload-id "cNV6KCSNANFZapz1LUGPC5XwUVi1n6yUoIeSP138sNOKPeMhpKQRrbT9k0ePmgoOTCj9K83T4e2Gb5hQvNoNpCKqyb8m3.oyYgQNZD6FNJLBZluOIUyRE.qM5yhDTdhz" --checksum-algorithm SHA256
   ```

   Nach Abschluss der einzelnen `upload-part`-Befehle sollten Sie eine Ausgabe wie im folgenden Beispiel sehen:

   ```
   {
       "ServerSideEncryption": "AES256",
       "ETag": "\"e611693805e812ef37f96c9937605e69\"",
       "ChecksumSHA256": "QLl8R4i4+SaJlrl8ZIcutc5TbZtwt2NwB8lTXkd3GH0="
   }
   ```

1. Erhöhen Sie für nachfolgende Teile die Teilenummer entsprechend:

   ```
   aws s3api upload-part --bucket amzn-s3-demo-bucket1 --key 'census_data_file' --part-number <part-number> --body <file-path> --upload-id "<your-upload-id>" --checksum-algorithm SHA256
   ```

   Verwenden Sie beispielsweise den folgenden Befehl, um den zweiten Teil hochzuladen:

   ```
   aws s3api upload-part --bucket amzn-s3-demo-bucket1 --key 'census_data_file' --part-number 2 --body census-part01 --upload-id "cNV6KCSNANFZapz1LUGPC5XwUVi1n6yUoIeSP138sNOKPeMhpKQRrbT9k0ePmgoOTCj9K83T4e2Gb5hQvNoNpCKqyb8m3.oyYgQNZD6FNJLBZluOIUyRE.qM5yhDTdhz" --checksum-algorithm SHA256
   ```

   Amazon S3 gibt ein Entitäts-Tag (ETag) und zusätzliche Prüfsummen für jeden hochgeladenen Teil als Header in der Antwort zurück.

1. Verwenden Sie den `upload-part`-Befehl weiter, bis Sie alle Teile Ihres Objekts hochgeladen haben.

## Schritt 5: Listen Sie alle Teile Ihres mehrteiligen Uploads auf
<a name="list-parts-step5"></a>

Um den mehrteiligen Upload abzuschließen, benötigen Sie eine Liste aller Teile, die für diesen speziellen mehrteiligen Upload hochgeladen wurden. Die Ausgabe des `list-parts` Befehls enthält Informationen wie Bucket-Namen, Schlüssel, Upload-ID, Artikelnummer ETag, zusätzliche Prüfsummen und mehr. Es ist hilfreich, diese Ausgabe in einer Datei zu speichern, sodass Sie sie für den nächsten Schritt verwenden können, wenn Sie den mehrteiligen Upload-Vorgang abschließen. Sie können eine JSON-Ausgabedatei namens `parts.json` erstellen, indem Sie die folgende Methode verwenden.

**So erstellen Sie eine Datei, die alle Teile auflistet**

1. Verwenden Sie den folgenden `list-parts`-Befehl, um eine JSON-Datei mit den Details aller hochgeladenen Teile zu generieren. Ersetzen Sie ***amzn-s3-demo-bucket1*** durch Ihren tatsächlichen Bucket-Namen und **<your-upload-id>** durch die Upload-ID, die Sie in [Schritt 3](#create-multipart-upload-step3) erhalten haben. Weitere Informationen zum `list-parts`-Befehl finden Sie unter [https://docs.aws.amazon.com/cli/latest/reference/s3api/list-parts.html](https://docs.aws.amazon.com/cli/latest/reference/s3api/list-parts.html) im *AWS Command Line Interface -Benutzerhandbuch*.

   ```
   aws s3api list-parts --bucket amzn-s3-demo-bucket1 --key 'census_data_file' --upload-id <your-upload-id> --query '{Parts: Parts[*].{PartNumber: PartNumber, ETag: ETag, ChecksumSHA256: ChecksumSHA256}}' --output json > parts.json
   ```

   Eine neue Datei namens `parts.json` wird generiert. Die Datei enthält Informationen im JSON-Format für alle Ihre hochgeladenen Teile. Die `parts.json` Datei enthält wichtige Informationen für jeden Teil Ihres mehrteiligen Uploads, z. B. die Artikelnummern und die entsprechenden ETag Werte, die für den Abschluss des mehrteiligen Upload-Vorgangs erforderlich sind.

1. Öffnen Sie `parts.json` mit einem beliebigen Texteditor oder über das Terminal. Hier ist die Beispielausgabe:

   ```
   {
       "Parts": [
           {
               "PartNumber": 1,
               "ETag": "\"3c3097f89e2a2fece47ac54b243c9d97\"",
               "ChecksumSHA256": "fTPVHfyNHdv5VkR4S3EewdyioXECv7JBxN+d4FXYYTw="
           },
           {
               "PartNumber": 2,
               "ETag": "\"03c71cc160261b20ab74f6d2c476b450\"",
               "ChecksumSHA256": "VDWTa8enjOvULBAO3W2a6C+5/7ZnNjrnLApa1QVc3FE="
           },
           {
               "PartNumber": 3,
               "ETag": "\"81ae0937404429a97967dffa7eb4affb\"",
               "ChecksumSHA256": "cVVkXehUlzcwrBrXgPIM+EKQXPUvWist8mlUTCs4bg8="
           }
       ]
   }
   ```

## Schritt 6: Schließen Sie den mehrteiligen Upload ab
<a name="complete-multipart-upload-step6"></a>

Nachdem Sie alle Teile Ihres mehrteiligen Uploads hochgeladen und aufgelistet haben, besteht der letzte Schritt darin, den mehrteiligen Upload abzuschließen. In diesem Schritt werden alle hochgeladenen Teile zu einem einzigen Objekt in Ihrem S3-Bucket zusammengeführt.

**Anmerkung**  
Sie können die Objekt-Prüfsumme vor dem Aufrufen von `complete-multipart-upload` berechnen, indem Sie `--checksum-sha256` in Ihre Anfrage aufnehmen. Wenn die Prüfsummen nicht übereinstimmen, schlägt die Anforderung in Amazon S3 fehl. Weitere Informationen finden Sie unter [https://docs.aws.amazon.com/cli/latest/reference/s3api/complete-multipart-upload.html](https://docs.aws.amazon.com/cli/latest/reference/s3api/complete-multipart-upload.html) im *AWS Command Line Interface -Benutzerhandbuch*.

**So schließen Sie einen mehrteiligen Upload ab**

Verwenden Sie den Befehl `complete-multipart-upload`, um den mehrteiligen Upload abzuschließen. Für diesen Befehl sind die in [Schritt 5](#list-parts-step5) erstellte `parts.json`-Datei, Ihr Bucket-Name und die Upload-ID erforderlich. Ersetzen Sie **<*amzn-s3-demo-bucket1*>** durch den Namen Ihres Buckets und **<your-upload-id>** mit der Upload-ID von `parts.json`.

```
aws s3api complete-multipart-upload --multipart-upload file://parts.json --bucket amzn-s3-demo-bucket1 --key 'census_data_file' --upload-id <your-upload-id>
```

Hier ist die Beispielausgabe:

```
{
    "ServerSideEncryption": "AES256",
    "Location": "https://amzn-s3-demo-bucket1.s3.us-east-2.amazonaws.com/census_data_file",
    "Bucket": "amzn-s3-demo-bucket1",
    "Key": "census_data_file",
    "ETag": "\"f453c6dccca969c457efdf9b1361e291-3\"",
    "ChecksumSHA256": "aI8EoktCdotjU8Bq46DrPCxQCGuGcPIhJ51noWs6hvk=-3"
}
```

**Anmerkung**  
Löschen Sie die einzelnen Teildateien noch nicht. Sie benötigen die einzelnen Teile, damit Sie Prüfsummen auf sie anwenden können, um die Integrität des zusammengeführten Objekts zu überprüfen.

## Schritt 7: Vergewissern Sie sich, dass das Objekt in Ihren Bucket hochgeladen wurde
<a name="confirm-upload-step7"></a>

Nach Abschluss des mehrteiligen Uploads können Sie überprüfen, ob das Objekt erfolgreich in Ihren S3-Bucket hochgeladen wurde. Verwenden Sie den Befehl `list-objects-v2`, um die Objekte in Ihrem Bucket aufzulisten und zu bestätigen, dass ihre neu hochgeladene Datei vorhanden ist. 

**So listen Sie das hochgeladene Objekt auf**

Um die Objekte in Ihrem Bucket aufzulisten, verwenden Sie den `list-objects-v2`-Befehl. Ersetzen Sie ***amzn-s3-demo-bucket1*** durch den tatsächlichen Namen Ihres Buckets. 

```
aws s3api list-objects-v2 --bucket amzn-s3-demo-bucket1
```

Dieser Befehl gibt eine Liste von Objekten in Ihrem Bucket zurück. Suchen Sie in der Objektliste nach Ihrer hochgeladenen Datei (z. B. `census_data_file`). 

Weitere Informationen finden Sie im Abschnitt [Beispiele](https://docs.aws.amazon.com/cli/latest/reference/s3api/list-objects-v2.html) für den `list-objects-v2`-Befehl im *AWS Command Line Interface -Benutzerhandbuch*.

## Schritt 8: Überprüfen Sie die Objektintegrität mit einer Prüfsumme MD5
<a name="verify-object-integrity-step8"></a>

Wenn Sie ein Objekt hochladen, können Sie einen Prüfsummenalgorithmus angeben, den Amazon S3 verwenden soll. Standardmäßig speichert Amazon S3 den MD5 Byte-Digest als den des ETag Objekts. Bei mehrteiligen Uploads ETag handelt es sich nicht um die Prüfsumme für das gesamte Objekt, sondern um eine Zusammenstellung von Prüfsummen für jeden einzelnen Teil.

**Um die Objektintegrität mithilfe einer Prüfsumme zu überprüfen MD5**

1. Führen Sie eine `head-object` Anfrage ETag aus, um das hochgeladene Objekt abzurufen:

   ```
   aws s3api head-object --bucket amzn-s3-demo-bucket1 --key census_data_file
   ```

   Hier ist die Beispielausgabe:

   ```
   {
       "AcceptRanges": "bytes",
       "LastModified": "2024-07-26T19:04:13+00:00",
       "ContentLength": 16106127360,
       "ETag": "\"f453c6dccca969c457efdf9b1361e291-3\"",
       "ContentType": "binary/octet-stream",
       "ServerSideEncryption": "AES256",
       "Metadata": {}
   }
   ```

   An das Ende ETag wurde „-3" angehängt. Dies weist darauf hin, dass das Objekt mithilfe eines mehrteiligen Uploads in drei Teilen hochgeladen wurde.

1. Als Nächstes berechnen Sie die MD5 Prüfsumme jedes Teils mit dem Befehl. `md5sum` Stellen Sie sicher, dass Sie den richtigen Pfad zu Ihren Teildateien angeben:

   ```
   md5sum census-part*
   ```

   Hier ist die Beispielausgabe:

   ```
   e611693805e812ef37f96c9937605e69 census-part00
   63d2d5da159178785bfd6b6a5c635854 census-part01
   95b87c7db852451bb38b3b44a4e6d310 census-part02
   ```

1. Kombinieren Sie für diesen Schritt die MD5 Hashes manuell zu einer Zeichenfolge. Führen Sie dann den folgenden Befehl aus, um die Zeichenfolge in eine Binärdatei zu konvertieren und die MD5 Prüfsumme des Binärwerts zu berechnen:

   ```
   echo "e611693805e812ef37f96c9937605e6963d2d5da159178785bfd6b6a5c63585495b87c7db852451bb38b3b44a4e6d310" | xxd -r -p | md5sum
   ```

   Hier ist die Beispielausgabe:

   ```
   f453c6dccca969c457efdf9b1361e291 -
   ```

   Dieser Hashwert sollte dem Hashwert des ursprünglichen ETag Werts in [Schritt 1](#create-large-file-step1) entsprechen, wodurch die Integrität des `census_data_file` Objekts bestätigt wird.

Wenn Sie Amazon S3 anweisen, zusätzliche Prüfsummen zu verwenden, berechnet Amazon S3 den Prüfsummenwert für jeden Teil und speichert die Werte. Wenn Sie die Prüfsummenwerte für einzelne Teile von mehrteiligen Uploads abrufen möchten, die noch in Bearbeitung sind, können Sie `list-parts` verwenden.

Weitere Informationen zur Funktionsweise von Prüfsummen mit mehrteiligen Upload-Objekten finden Sie unter [Überprüfen der Objektintegrität in Amazon S3](checking-object-integrity.md).

## Schritt 9: Überprüfen Sie die Objektintegrität mit einer zusätzlichen Prüfsumme
<a name="verify-object-integrity-sha256-step9"></a>

In diesem Schritt verwendet dieses Tutorial SHA-256 als zusätzliche Prüfsumme zur Überprüfung der Objektintegrität. Wenn Sie eine andere zusätzliche Prüfsumme verwendet haben, verwenden Sie stattdessen diesen Prüfsummenwert.

**Um die Objektintegrität zu überprüfen mit SHA256**

1. Führen Sie den folgenden Befehl in Ihrem Terminal aus, einschließlich des `--checksum-mode enabled`-Arguments, um den `ChecksumSHA256`-Wert Ihres Objekts anzuzeigen:

   ```
   aws s3api head-object --bucket amzn-s3-demo-bucket1 --key census_data_file --checksum-mode enabled
   ```

   Hier ist die Beispielausgabe:

   ```
   {
       "AcceptRanges": "bytes",
       "LastModified": "2024-07-26T19:04:13+00:00",
       "ContentLength": 16106127360,
       "ChecksumSHA256": "aI8EoktCdotjU8Bq46DrPCxQCGuGcPIhJ51noWs6hvk=-3",
       "ETag": "\"f453c6dccca969c457efdf9b1361e291-3\"",
       "ContentType": "binary/octet-stream",
       "ServerSideEncryption": "AES256",
       "Metadata": {}
   }
   ```

1. Verwenden Sie die folgenden Befehle, um die `ChecksumSHA256`-Werte für die einzelnen Teile in Base64 zu dekodieren und sie in einer Binärdatei namens `outfile` zu speichern. Diese Werte finden Sie in Ihrer `parts.json`-Datei. Ersetzen Sie die Base64-Beispiel-Zeichenfolgen durch Ihre tatsächlichen `ChecksumSHA256`-Werte.

   ```
   echo "QLl8R4i4+SaJlrl8ZIcutc5TbZtwt2NwB8lTXkd3GH0=" | base64 --decode >> outfile
   echo "xCdgs1K5Bm4jWETYw/CmGYr+m6O2DcGfpckx5NVokvE=" | base64 --decode >> outfile
   echo "f5wsfsa5bB+yXuwzqG1Bst91uYneqGD3CCidpb54mAo=" | base64 --decode >> outfile
   ```

1. Führen Sie den folgenden Befehl aus, um die SHA256 Prüfsumme von zu berechnen: `outfile`

   ```
   sha256sum outfile
   ```

   Hier ist die Beispielausgabe:

   ```
   688f04a24b42768b6353c06ae3a0eb3c2c50086b8670f221279d67a16b3a86f9 outfile
   ```

   Nehmen Sie im nächsten Schritt den Hash-Wert und konvertieren Sie ihn in einen Binärwert. Dieser Binärwert sollte dem `ChecksumSHA256`-Wert aus [Schritt 1](#create-large-file-step1) entsprechen.

1. [Konvertieren Sie die SHA256 Prüfsumme aus [Schritt 3](#create-multipart-upload-step3) in eine Binärdatei und codieren Sie sie dann nach Base64, um zu überprüfen, ob sie mit dem `ChecksumSHA256` Wert aus Schritt 1 übereinstimmt:](#create-large-file-step1)

   ```
   echo "688f04a24b42768b6353c06ae3a0eb3c2c50086b8670f221279d67a16b3a86f9" | xxd -r -p | base64
   ```

   Hier ist die Beispielausgabe:

   ```
   aI8EoktCdotjU8Bq46DrPCxQCGuGcPIhJ51noWs6hvk=
   ```

   Diese Ausgabe sollte bestätigen, dass die base64-Ausgabe mit dem `ChecksumSHA256`-Wert aus der `head-object`-Befehlsausgabe übereinstimmt. Wenn die Ausgabe mit dem Prüfsummenwert übereinstimmt, ist das Objekt gültig.

**Wichtig**  
Wenn Sie Amazon S3 anweisen, zusätzliche Prüfsummen zu verwenden, berechnet Amazon S3 die Prüfsummenwerte für jeden Teil und speichert sie.
Wenn Sie die Prüfsummenwerte für einzelne Teile von mehrteiligen Uploads abrufen möchten, die noch in Bearbeitung sind, können Sie `list-parts` verwenden.

## Schritt 10: Bereinigen Ihrer Ressourcen
<a name="clean-up-step10"></a>

Wenn Sie die in diesem Tutorial erstellten Dateien bereinigen möchten, verwenden Sie die folgende Methode. Anweisungen zum Löschen der in Ihren S3-Bucket hochgeladenen Dateien finden Sie unter [Löschen von Amazon-S3-Objekten](DeletingObjects.md).

**Löschen Sie die in [Schritt 1](#create-large-file-step1) erstellten lokalen Dateien:**

Um die Dateien zu entfernen, die Sie für Ihren mehrteiligen Upload erstellt haben, führen Sie den folgenden Befehl in Ihrem Arbeitsverzeichnis aus:

```
rm census-data.bin census-part* outfile parts.json
```

# EInschränkungen mehrteiliger Amazon-S3-Uploads
<a name="qfacts"></a>

Mit dem mehrteiligen Upload können Sie ein einzelnes Objekt als Satz aus mehreren Teilen hochladen. Jeder Teil ist ein zusammenhängender Teil der Daten des Objekts. Nachdem alle Teile Ihres Objekts hochgeladen sind, fügt Amazon S3 diese Teile zusammen und erstellt das Objekt. Wenn Ihre Objektgröße 100 MB erreicht, sollten Sie in der Regel mehrteilige Uploads verwenden, anstatt das Objekt in einem einzigen Vorgang hochzuladen. Weitere Informationen über mehrteilige Uploads finden Sie unter [Hochladen und Kopieren von Objekten mit mehrteiligen Uploads in Amazon S3](mpuoverview.md). 

Die folgende Tabelle enthält die Core-Spezifikationen für den mehrteiligen Upload. Dazu gehören maximale Objektgröße, maximale Anzahl von Teilen, maximale Teilgröße und mehr. Es gibt keine minimale Größenbeschränkung für den letzten Teil Ihres mehrteiligen Uploads.


| Item | Spezifikation | 
| --- | --- | 
| Maximale Objektgröße | 48,8 TiB  | 
| Maximale Anzahl von Teilen pro Upload | 10.000 | 
| Teilenummern | 1 bis 10.000 (inklusive) | 
| Teilegröße | 5 MiB bis 5 GiB. Es gibt keine minimale Größenbeschränkung für den letzten Teil Ihres mehrteiligen Uploads. | 
| Maximale Anzahl der zurückgegebenen Teile bei einer Anforderung zum Auflisten der Teile | 1000  | 
| Maximale Anzahl der zurückgegebenen mehrteiligen Uploads bei einer Anforderung zum Auflisten mehrteiliger Uploads | 1000  | 