Wählen Sie Ihre Cookie-Einstellungen aus

Wir verwenden essentielle Cookies und ähnliche Tools, die für die Bereitstellung unserer Website und Services erforderlich sind. Wir verwenden Performance-Cookies, um anonyme Statistiken zu sammeln, damit wir verstehen können, wie Kunden unsere Website nutzen, und Verbesserungen vornehmen können. Essentielle Cookies können nicht deaktiviert werden, aber Sie können auf „Anpassen“ oder „Ablehnen“ klicken, um Performance-Cookies abzulehnen.

Wenn Sie damit einverstanden sind, verwenden AWS und zugelassene Drittanbieter auch Cookies, um nützliche Features der Website bereitzustellen, Ihre Präferenzen zu speichern und relevante Inhalte, einschließlich relevanter Werbung, anzuzeigen. Um alle nicht notwendigen Cookies zu akzeptieren oder abzulehnen, klicken Sie auf „Akzeptieren“ oder „Ablehnen“. Um detailliertere Entscheidungen zu treffen, klicken Sie auf „Anpassen“.

Verwenden von mehrteiligen Uploads mit Verzeichnis-Buckets

Fokusmodus
Verwenden von mehrteiligen Uploads mit Verzeichnis-Buckets - Amazon Simple Storage Service

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.

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.

Sie können den mehrteiligen Upload-Prozess verwenden, um ein einzelnes Objekt als eine Reihe von Teilen hochzuladen. 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.

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 – Kleinere Teilgrößen minimieren 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 explizit 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 ausführen, können Sie mehrteilige Uploads verwenden, um die Resilienz in Bezug auf Netzwerkfehler durch Vermeidung von Neustarts der Uploads zu 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.

Wenn Sie mehrteilige Uploads verwenden, um Objekte in Verzeichnis-Buckets in die Speicherklasse Amazon S3 Express One Zone hochzuladen, ähnelt der mehrteilige Upload-Vorgang jenem zum Hochladen von Objekten in Allzweck-Buckets. Es gibt jedoch einige grundlegende Unterschiede.

Weitere Informationen zur Verwendung von mehrteiligen Uploads zum Hochladen von Objekten zu S3 Express One Zone finden Sie in den folgenden Themen.

Der mehrteilige Upload-Prozess

Ein mehrteiliger Upload ist ein dreistufiger Prozess:

  • Sie initiieren den Upload.

  • Sie laden die Objektteile hoch.

  • Nachdem Sie alle Teile hochgeladen haben, schließen Sie den mehrteiligen Upload ab.

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.

Initiieren des mehrteiligen Uploads

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 durchführen oder ihn abbrechen.

Teile hochladen

Beim Hochladen eines Teils müssen Sie zusätzlich zur Upload-ID eine Teilenummer angeben. Wenn Sie mehrteilige Uploads mit S3 Express One Zone verwenden, müssen die mehrteiligen Teilenummern aufeinander folgende Teilenummern sein. Wenn Sie versuchen, eine mehrteilige Upload-Anforderung mit nicht aufeinanderfolgenden Teilenummern abzuschließen, wird ein HTTP 400 Bad Request-Fehler (ungültige Reihenfolge der Teile) generiert.

Die Teilenummer identifiziert eindeutig einen Teil und seine Position im Objekt, das Sie hochladen. Wenn Sie einen neuen Teil mithilfe derselben Teilenummer hochladen wie bereits einmal zuvor, wird der früher hochgeladene Teil überschrieben.

Immer wenn Sie ein Teil hochladen, gibt Amazon S3 in seiner Antwort einen Entity-Tag (ETag) -Header zurück. Für jeden Upload eines Teils müssen Sie die Artikelnummer und den ETag Wert aufzeichnen. Die ETag Werte für alle Uploads von Objektteilen bleiben gleich, aber jedem Teil wird eine andere Artikelnummer zugewiesen. Sie müssen diese Werte in die spätere Anforderung einschließen, um den mehrteiligen Upload abzuschließen.

Amazon S3 verschlüsselt automatisch alle neuen Objekte, die in einen S3-Bucket hochgeladen werden. Wenn Sie bei einem mehrteiligen Upload in Ihrer Kopieranforderung keine Verschlüsselungsinformationen angeben, wird die Verschlüsselungseinstellung der hochgeladenen Teile auf die Standardverschlüsselungskonfiguration des Ziel-Buckets festgelegt. Die Standardverschlüsselungskonfiguration eines Amazon-S3-Buckets ist immer aktiviert und mindestens auf serverseitige Verschlüsselung mit von Amazon S3 verwalteten Schlüsseln (SSE-S3) eingestellt. Für Verzeichnis-Buckets werden SSE-S3 und serverseitige Verschlüsselung mit AWS KMS Schlüsseln (SSE-KMS) unterstützt. Weitere Informationen finden Sie unter Datenschutz und Verschlüsselung.

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. 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 der beiden Artikelnummern und der entsprechenden Werte enthalten. ETag Die Amazon S3 S3-Antwort enthält eine ETag , die die kombinierten Objektdaten eindeutig identifiziert. Dies ETag ist kein MD5 Hash der Objektdaten.

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 in dem mehrteiligen Upload mehr als 1 000 Teile vorhanden sind, müssen Sie die Paginierung verwenden, um alle Teile abzurufen.

Die zurückgegebene Teileauflistung enthält keine Teile, 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 laufender mehrteiliger Upload ist ein Upload, den Sie initiiert 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. 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.

Weitere Informationen zu mehrteiligen Upload-Angeboten finden Sie unter ListPartsin der Amazon Simple Storage Service API-Referenz.

Prüfsummen mit mehrteiligen Upload-Operationen

Wenn Sie ein Objekt hochladen, können Sie einen Prüfsummenalgorithmus angeben, um die Objektintegrität zu überprüfen. MD5 wird für Verzeichnis-Buckets nicht unterstützt. Sie können einen der folgenden Secure Hash Algorithms (SHA)- oder Cyclic Redundancy Check (CRC)-Algorithmen zur Überprüfung der Datenintegrität angeben:

  • CRC32

  • CRC32C

  • SHA-1

  • SHA-256

Sie können die Amazon S3 S3-REST-API oder die verwenden AWS SDKs , um den Prüfsummenwert für einzelne Teile abzurufen, indem Sie GetObject oder HeadObject verwenden. Wenn Sie die Prüfsummenwerte für einzelne Teile von mehrteiligen Uploads abrufen möchten, die noch in Bearbeitung sind, können Sie ListParts verwenden.

Wichtig

Wenn Sie die vorherigen Prüfsummenalgorithmen verwenden, müssen die mehrteiligen Teilenummern aufeinanderfolgende Teilenummern sein. Wenn Sie versuchen, eine mehrteilige Upload-Anforderung mit nicht aufeinanderfolgenden Teilenummern abzuschließen, generiert Amazon S3 einen HTTP 400 Bad Request-HTTP-Fehler.

Weitere Informationen zur Funktionsweise von Prüfsummen mit mehrteiligen Upload-Objekten finden Sie unter Überprüfen der Objektintegrität in Amazon S3.

Gleichzeitige mehrteilige Upload-Vorgänge

In einer verteilten Entwicklungsumgebung kann Ihre Anwendung mehrere Aktualisierungen am selben Objekt gleichzeitig initiieren. Beispielsweise kann Ihre Anwendung möglicherweise mehrere mehrteilige 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. Für S3 Express One Zone entspricht die Objekterstellungszeit dem Abschlussdatum des mehrteiligen Uploads.

Wichtig

Die Versionsverwaltung wird für Objekte, die in Verzeichnis-Buckets gespeichert sind, nicht unterstützt.

Mehrteilige Uploads und Preise

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. Wenn Sie den mehrteiligen Upload abbrechen, löscht Amazon S3 Upload-Artefakte und alle Teile, die Sie hochgeladen haben. Die Berechnung wird eingestellt. 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.

Wichtig

Wenn die Anforderung für einen vollständigen mehrteiligen Upload nicht erfolgreich gesendet wird, werden die Objektteile nicht zusammengefügt und es wird kein Objekt erstellt. Ihnen wird der gesamte Speicher in Rechnung gestellt, der mit hochgeladenen Teilen verknüpft ist. Deshalb sollten Sie den mehrteiligen Upload abschließen, damit das Objekt erstellt wird, oder den mehrteiligen Upload abbrechen, um hochgeladene Teile zu entfernen.

Bevor Sie Ihren Verzeichnis-Bucket löschen können, müssen Sie alle alle laufenden mehrteiligen Uploads abbrechen. Verzeichnis-Buckets unterstützen keine S3-Lifecycle-Konfigurationen. Bei Bedarf können Sie Ihre aktiven mehrteiligen Uploads auflisten, die Uploads dann abbrechen und dann Ihren Bucket löschen.

API-Operationen und Berechtigungen für mehrteilige Uploads

Um den Zugriff auf API-Operationen für die Objektverwaltung in einem Verzeichnis-Bucket zu ermöglichen, erteilen Sie Ihrem Verzeichnis-Bucket die s3express:CreateSession-Berechtigung in einer Bucket-Richtlinie oder einer identitätsbasierten AWS Identity and Access Management (IAM)-Richtlinie.

Sie müssen über die erforderlichen Berechtigungen verfügen, um die Multipart-Upload-Vorgänge zu verwenden. Sie können Bucket-Richtlinien oder identitätsbasierte IAM-Richtlinien verwenden, um IAM-Prinzipalen Berechtigungen zur Ausführung dieser Operationen zu gewähren. Die folgende Tabelle listet die erforderlichen Berechtigungen für verschiedene mehrteilige Uploadvorgänge auf.

Sie können den Initiator eines mehrteiligen Uploads anhand des Initiator-Elements identifizieren. Wenn der Initiator ein ist 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.

Aktion Erforderliche Berechtigungen

Erstellen eines mehrteiligen Uploads

Sie müssen die s3express:CreateSession-Aktion für einen Verzeichnis-Bucket ausführen können, um einen mehrteiligen Upload zu erstellen.

Initiieren eines mehrteiligen Uploads

Sie müssen die s3express:CreateSession-Aktion für einen Verzeichnis-Bucket ausführen können, um einen mehrteiligen Upload zu initiieren.

Upload eines Teils

Sie müssen die s3express:CreateSession-Aktion für einen Verzeichnis-Bucket ausführen können, um einen Teil in den Verzeichnis-Bucket hochzuladen.

Der Bucket-Eigentümer muss dem Initiator erlauben, die s3express:CreateSession-Aktion für ein Objekt auszuführen, damit der Initiator einen Teil hochladen kann.

Upload eines Teils (kopiere)

Sie müssen die s3express:CreateSession-Aktion für einen Verzeichnis-Bucket ausführen können, um einen Teil in den Verzeichnis-Bucket hochzuladen.

Damit der Initiator einen Teil eines Objekts hochladen kann, muss der Bucket-Besitzer dem Initiator eine Genehmigung für die Ausführung der Aktion s3express:CreateSession für das Objekt erteilen.

Abschließen eines mehrteiligen Uploads

Sie müssen die s3express:CreateSession-Aktion für einen Verzeichnis-Bucket ausführen können, um einen mehrteiligen Upload abzuschließen.

Damit der Initiator einen mehrteiligen Upload abschließen kann, muss der Bucket-Eigentümer dem Initiator erlauben, die Aktion s3express:CreateSession am Objekt auszuführen.

Abbrechen eines mehrteiligen Uploads

Sie müssen die s3express:CreateSession-Aktion ausführen können, um einen mehrteiligen Upload abzubrechen.

Um einen mehrteiligen Upload abzubrechen, muss dem Initiator die ausdrückliche Zugriffsberechtigung für die Ausführung der s3express:CreateSession-Aktion gewährt werden.

Teile auflisten

Sie müssen die s3express:CreateSession-Aktion für den Verzeichnis-Bucket ausführen können, um Teile in einem mehrteiligen Upload aufzulisten.

Laufende mehrteilige Uploads auflisten

Sie müssen die s3:ListBucketMultipartUploads-Aktion für einen Bucket ausführen können, um laufende mehrteilige Uploads in einen Bucket aufzulisten.

Unterstützung von API-Operationen für mehrteilige Uploads

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

Beispiele

Damit Sie einen mehrteiligen Upload verwenden können, um ein Objekt in S3 Express One Zone in einen Verzeichnis-Bucket hochzuladen, sehen Sie sich die folgenden Beispiele an.

Erstellen eines mehrteiligen Uploads

Anmerkung

Wenn Sie bei Verzeichnis-Buckets einen CreateMultipartUpload- und UploadPartCopy-Vorgang ausführen, muss die Standardverschlüsselung des Buckets die gewünschte Verschlüsselungskonfiguration verwenden, und die Anforderungs-Header, die Sie in der CreateMultipartUpload-Anforderung angeben, müssen mit der Standardverschlüsselungskonfiguration des Ziel-Buckets übereinstimmen.

Das folgende C#-Beispiel veranschaulicht, wie Sie einen mehrteiligen Upload erstellen.

SDK for Java 2.x
/** * This method creates a multipart upload request that generates a unique upload ID that is used to track * all the upload parts * * @param s3 * @param bucketName - for example, 'doc-example-bucket--use1-az4--x-s3' * @param key * @return */ private static String createMultipartUpload(S3Client s3, String bucketName, String key) { CreateMultipartUploadRequest createMultipartUploadRequest = CreateMultipartUploadRequest.builder() .bucket(bucketName) .key(key) .build(); String uploadId = null; try { CreateMultipartUploadResponse response = s3.createMultipartUpload(createMultipartUploadRequest); uploadId = response.uploadId(); } catch (S3Exception e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } return uploadId;
SDK for Python
def create_multipart_upload(s3_client, bucket_name, key_name): ''' Create a multipart upload to a directory bucket :param s3_client: boto3 S3 client :param bucket_name: The destination bucket for the multipart upload :param key_name: The key name for the object to be uploaded :return: The UploadId for the multipart upload if created successfully, else None ''' try: mpu = s3_client.create_multipart_upload(Bucket = bucket_name, Key = key_name) return mpu['UploadId'] except ClientError as e: logging.error(e) return None

SDK for Java 2.x
/** * This method creates a multipart upload request that generates a unique upload ID that is used to track * all the upload parts * * @param s3 * @param bucketName - for example, 'doc-example-bucket--use1-az4--x-s3' * @param key * @return */ private static String createMultipartUpload(S3Client s3, String bucketName, String key) { CreateMultipartUploadRequest createMultipartUploadRequest = CreateMultipartUploadRequest.builder() .bucket(bucketName) .key(key) .build(); String uploadId = null; try { CreateMultipartUploadResponse response = s3.createMultipartUpload(createMultipartUploadRequest); uploadId = response.uploadId(); } catch (S3Exception e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } return uploadId;
SDK for Python
def create_multipart_upload(s3_client, bucket_name, key_name): ''' Create a multipart upload to a directory bucket :param s3_client: boto3 S3 client :param bucket_name: The destination bucket for the multipart upload :param key_name: The key name for the object to be uploaded :return: The UploadId for the multipart upload if created successfully, else None ''' try: mpu = s3_client.create_multipart_upload(Bucket = bucket_name, Key = key_name) return mpu['UploadId'] except ClientError as e: logging.error(e) return None
/** * This method creates a multipart upload request that generates a unique upload ID that is used to track * all the upload parts * * @param s3 * @param bucketName - for example, 'doc-example-bucket--use1-az4--x-s3' * @param key * @return */ private static String createMultipartUpload(S3Client s3, String bucketName, String key) { CreateMultipartUploadRequest createMultipartUploadRequest = CreateMultipartUploadRequest.builder() .bucket(bucketName) .key(key) .build(); String uploadId = null; try { CreateMultipartUploadResponse response = s3.createMultipartUpload(createMultipartUploadRequest); uploadId = response.uploadId(); } catch (S3Exception e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } return uploadId;

Dieses Beispiel veranschaulicht, wie Sie einen Verzeichnis-Bucket mit der AWS CLI erstellen. Dieser Befehl startet einen mehrteiligen Upload in den Verzeichnis-Bucket bucket-base-name -- zone-id --x-s3 für das Objekt. KEY_NAME Um den Befehl zu verwenden, ersetzen Sie das user input placeholders durch Ihre eigenen Informationen.

aws s3api create-multipart-upload --bucket bucket-base-name--zone-id--x-s3 --key KEY_NAME

Weitere Informationen finden Sie unter create-multipart-upload im AWS Command Line Interface.

Dieses Beispiel veranschaulicht, wie Sie einen Verzeichnis-Bucket mit der AWS CLI erstellen. Dieser Befehl startet einen mehrteiligen Upload in den Verzeichnis-Bucket bucket-base-name -- zone-id --x-s3 für das Objekt. KEY_NAME Um den Befehl zu verwenden, ersetzen Sie das user input placeholders durch Ihre eigenen Informationen.

aws s3api create-multipart-upload --bucket bucket-base-name--zone-id--x-s3 --key KEY_NAME

Weitere Informationen finden Sie unter create-multipart-upload im AWS Command Line Interface.

Hochladen der Teile eines mehrteiligen Uploads

Die folgenden Beispiele zeigen, wie ein Teil eines mehrteiligen Uploads hochgeladen wird.

SDK for Java 2.x

Das folgende Beispiel zeigt, wie Sie ein einzelnes Objekt in Teile aufteilen und diese Teile dann mit dem SDK für Java 2.x in einen Verzeichnis-Bucket hochladen.

/** * This method creates part requests and uploads individual parts to S3 and then returns all the completed parts * * @param s3 * @param bucketName * @param key * @param uploadId * @throws IOException */ private static ListCompletedPartmultipartUpload(S3Client s3, String bucketName, String key, String uploadId, String filePath) throws IOException { int partNumber = 1; ListCompletedPart completedParts = new ArrayList<>(); ByteBuffer bb = ByteBuffer.allocate(1024 * 1024 * 5); // 5 MB byte buffer // read the local file, breakdown into chunks and process try (RandomAccessFile file = new RandomAccessFile(filePath, "r")) { long fileSize = file.length(); int position = 0; while (position < fileSize) { file.seek(position); int read = file.getChannel().read(bb); bb.flip(); // Swap position and limit before reading from the buffer. UploadPartRequest uploadPartRequest = UploadPartRequest.builder() .bucket(bucketName) .key(key) .uploadId(uploadId) .partNumber(partNumber) .build(); UploadPartResponse partResponse = s3.uploadPart( uploadPartRequest, RequestBody.fromByteBuffer(bb)); CompletedPart part = CompletedPart.builder() .partNumber(partNumber) .eTag(partResponse.eTag()) .build(); completedParts.add(part); bb.clear(); position += read; partNumber++; } } catch (IOException e) { throw e; } return completedParts; }
SDK for Python

Das folgende Beispiel zeigt, wie Sie ein einzelnes Objekt in Teile aufteilen und diese Teile dann mit dem SDK für Python in einen Verzeichnis-Bucket hochladen.

def multipart_upload(s3_client, bucket_name, key_name, mpu_id, part_size): ''' Break up a file into multiple parts and upload those parts to a directory bucket :param s3_client: boto3 S3 client :param bucket_name: Destination bucket for the multipart upload :param key_name: Key name for object to be uploaded and for the local file that's being uploaded :param mpu_id: The UploadId returned from the create_multipart_upload call :param part_size: The size parts that the object will be broken into, in bytes. Minimum 5 MiB, Maximum 5 GiB. There is no minimum size for the last part of your multipart upload. :return: part_list for the multipart upload if all parts are uploaded successfully, else None ''' part_list = [] try: with open(key_name, 'rb') as file: part_counter = 1 while True: file_part = file.read(part_size) if not len(file_part): break upload_part = s3_client.upload_part( Bucket = bucket_name, Key = key_name, UploadId = mpu_id, Body = file_part, PartNumber = part_counter ) part_list.append({'PartNumber': part_counter, 'ETag': upload_part['ETag']}) part_counter += 1 except ClientError as e: logging.error(e) return None return part_list

SDK for Java 2.x

Das folgende Beispiel zeigt, wie Sie ein einzelnes Objekt in Teile aufteilen und diese Teile dann mit dem SDK für Java 2.x in einen Verzeichnis-Bucket hochladen.

/** * This method creates part requests and uploads individual parts to S3 and then returns all the completed parts * * @param s3 * @param bucketName * @param key * @param uploadId * @throws IOException */ private static ListCompletedPartmultipartUpload(S3Client s3, String bucketName, String key, String uploadId, String filePath) throws IOException { int partNumber = 1; ListCompletedPart completedParts = new ArrayList<>(); ByteBuffer bb = ByteBuffer.allocate(1024 * 1024 * 5); // 5 MB byte buffer // read the local file, breakdown into chunks and process try (RandomAccessFile file = new RandomAccessFile(filePath, "r")) { long fileSize = file.length(); int position = 0; while (position < fileSize) { file.seek(position); int read = file.getChannel().read(bb); bb.flip(); // Swap position and limit before reading from the buffer. UploadPartRequest uploadPartRequest = UploadPartRequest.builder() .bucket(bucketName) .key(key) .uploadId(uploadId) .partNumber(partNumber) .build(); UploadPartResponse partResponse = s3.uploadPart( uploadPartRequest, RequestBody.fromByteBuffer(bb)); CompletedPart part = CompletedPart.builder() .partNumber(partNumber) .eTag(partResponse.eTag()) .build(); completedParts.add(part); bb.clear(); position += read; partNumber++; } } catch (IOException e) { throw e; } return completedParts; }
SDK for Python

Das folgende Beispiel zeigt, wie Sie ein einzelnes Objekt in Teile aufteilen und diese Teile dann mit dem SDK für Python in einen Verzeichnis-Bucket hochladen.

def multipart_upload(s3_client, bucket_name, key_name, mpu_id, part_size): ''' Break up a file into multiple parts and upload those parts to a directory bucket :param s3_client: boto3 S3 client :param bucket_name: Destination bucket for the multipart upload :param key_name: Key name for object to be uploaded and for the local file that's being uploaded :param mpu_id: The UploadId returned from the create_multipart_upload call :param part_size: The size parts that the object will be broken into, in bytes. Minimum 5 MiB, Maximum 5 GiB. There is no minimum size for the last part of your multipart upload. :return: part_list for the multipart upload if all parts are uploaded successfully, else None ''' part_list = [] try: with open(key_name, 'rb') as file: part_counter = 1 while True: file_part = file.read(part_size) if not len(file_part): break upload_part = s3_client.upload_part( Bucket = bucket_name, Key = key_name, UploadId = mpu_id, Body = file_part, PartNumber = part_counter ) part_list.append({'PartNumber': part_counter, 'ETag': upload_part['ETag']}) part_counter += 1 except ClientError as e: logging.error(e) return None return part_list

Das folgende Beispiel zeigt, wie Sie ein einzelnes Objekt in Teile aufteilen und diese Teile dann mit dem SDK für Java 2.x in einen Verzeichnis-Bucket hochladen.

/** * This method creates part requests and uploads individual parts to S3 and then returns all the completed parts * * @param s3 * @param bucketName * @param key * @param uploadId * @throws IOException */ private static ListCompletedPartmultipartUpload(S3Client s3, String bucketName, String key, String uploadId, String filePath) throws IOException { int partNumber = 1; ListCompletedPart completedParts = new ArrayList<>(); ByteBuffer bb = ByteBuffer.allocate(1024 * 1024 * 5); // 5 MB byte buffer // read the local file, breakdown into chunks and process try (RandomAccessFile file = new RandomAccessFile(filePath, "r")) { long fileSize = file.length(); int position = 0; while (position < fileSize) { file.seek(position); int read = file.getChannel().read(bb); bb.flip(); // Swap position and limit before reading from the buffer. UploadPartRequest uploadPartRequest = UploadPartRequest.builder() .bucket(bucketName) .key(key) .uploadId(uploadId) .partNumber(partNumber) .build(); UploadPartResponse partResponse = s3.uploadPart( uploadPartRequest, RequestBody.fromByteBuffer(bb)); CompletedPart part = CompletedPart.builder() .partNumber(partNumber) .eTag(partResponse.eTag()) .build(); completedParts.add(part); bb.clear(); position += read; partNumber++; } } catch (IOException e) { throw e; } return completedParts; }

Dieses Beispiel zeigt, wie Sie ein einzelnes Objekt in Teile aufteilen und diese Teile dann mithilfe der AWS CLI in einen Verzeichnis-Bucket hochladen. Um den Befehl zu verwenden, ersetzen Sie die user input placeholders durch Ihre eigenen Informationen.

aws s3api upload-part --bucket bucket-base-name--zone-id--x-s3 --key KEY_NAME --part-number 1 --body LOCAL_FILE_NAME --upload-id "AS_mgt9RaQE9GEaifATue15dAAAAAAAAAAEMAAAAAAAAADQwNzI4MDU0MjUyMBYAAAAAAAAAAA0AAAAAAAAAAAH2AfYAAAAAAAAEBSD0WBKMAQAAAABneY9yBVsK89iFkvWdQhRCcXohE8RbYtc9QvBOG8tNpA"

Weitere Informationen finden Sie unter upload-part in der AWS Command Line Interface.

Dieses Beispiel zeigt, wie Sie ein einzelnes Objekt in Teile aufteilen und diese Teile dann mithilfe der AWS CLI in einen Verzeichnis-Bucket hochladen. Um den Befehl zu verwenden, ersetzen Sie die user input placeholders durch Ihre eigenen Informationen.

aws s3api upload-part --bucket bucket-base-name--zone-id--x-s3 --key KEY_NAME --part-number 1 --body LOCAL_FILE_NAME --upload-id "AS_mgt9RaQE9GEaifATue15dAAAAAAAAAAEMAAAAAAAAADQwNzI4MDU0MjUyMBYAAAAAAAAAAA0AAAAAAAAAAAH2AfYAAAAAAAAEBSD0WBKMAQAAAABneY9yBVsK89iFkvWdQhRCcXohE8RbYtc9QvBOG8tNpA"

Weitere Informationen finden Sie unter upload-part in der AWS Command Line Interface.

Abschließen eines mehrteiligen Uploads

Die folgenden Beispiele veranschaulichen, wie Sie einen mehrteiligen Upload abschließen.

SDK for Java 2.x

Die folgenden Beispiele zeigen, wie Sie einen mehrteiligen Upload mit dem SDK für Java 2.x abschließen.

/** * This method completes the multipart upload request by collating all the upload parts * @param s3 * @param bucketName - for example, 'doc-example-bucket--usw2-az1--x-s3' * @param key * @param uploadId * @param uploadParts */ private static void completeMultipartUpload(S3Client s3, String bucketName, String key, String uploadId, ListCompletedPart uploadParts) { CompletedMultipartUpload completedMultipartUpload = CompletedMultipartUpload.builder() .parts(uploadParts) .build(); CompleteMultipartUploadRequest completeMultipartUploadRequest = CompleteMultipartUploadRequest.builder() .bucket(bucketName) .key(key) .uploadId(uploadId) .multipartUpload(completedMultipartUpload) .build(); s3.completeMultipartUpload(completeMultipartUploadRequest); } public static void multipartUploadTest(S3Client s3, String bucketName, String key, String localFilePath) { System.out.println("Starting multipart upload for: " + key); try { String uploadId = createMultipartUpload(s3, bucketName, key); System.out.println(uploadId); ListCompletedPart parts = multipartUpload(s3, bucketName, key, uploadId, localFilePath); completeMultipartUpload(s3, bucketName, key, uploadId, parts); System.out.println("Multipart upload completed for: " + key); } catch (Exception e) { System.err.println(e.getMessage()); System.exit(1); } }
SDK for Python

Die folgenden Beispiele zeigen, wie Sie einen mehrteiligen Upload mit dem SDK für Python abschließen.

def complete_multipart_upload(s3_client, bucket_name, key_name, mpu_id, part_list): ''' Completes a multipart upload to a directory bucket :param s3_client: boto3 S3 client :param bucket_name: The destination bucket for the multipart upload :param key_name: The key name for the object to be uploaded :param mpu_id: The UploadId returned from the create_multipart_upload call :param part_list: The list of uploaded part numbers with their associated ETags :return: True if the multipart upload was completed successfully, else False ''' try: s3_client.complete_multipart_upload( Bucket = bucket_name, Key = key_name, UploadId = mpu_id, MultipartUpload = { 'Parts': part_list } ) except ClientError as e: logging.error(e) return False return True if __name__ == '__main__': MB = 1024 ** 2 region = 'us-west-2' bucket_name = 'BUCKET_NAME' key_name = 'OBJECT_NAME' part_size = 10 * MB s3_client = boto3.client('s3', region_name = region) mpu_id = create_multipart_upload(s3_client, bucket_name, key_name) if mpu_id is not None: part_list = multipart_upload(s3_client, bucket_name, key_name, mpu_id, part_size) if part_list is not None: if complete_multipart_upload(s3_client, bucket_name, key_name, mpu_id, part_list): print (f'{key_name} successfully uploaded through a ultipart upload to {bucket_name}') else: print (f'Could not upload {key_name} hrough a multipart upload to {bucket_name}')

SDK for Java 2.x

Die folgenden Beispiele zeigen, wie Sie einen mehrteiligen Upload mit dem SDK für Java 2.x abschließen.

/** * This method completes the multipart upload request by collating all the upload parts * @param s3 * @param bucketName - for example, 'doc-example-bucket--usw2-az1--x-s3' * @param key * @param uploadId * @param uploadParts */ private static void completeMultipartUpload(S3Client s3, String bucketName, String key, String uploadId, ListCompletedPart uploadParts) { CompletedMultipartUpload completedMultipartUpload = CompletedMultipartUpload.builder() .parts(uploadParts) .build(); CompleteMultipartUploadRequest completeMultipartUploadRequest = CompleteMultipartUploadRequest.builder() .bucket(bucketName) .key(key) .uploadId(uploadId) .multipartUpload(completedMultipartUpload) .build(); s3.completeMultipartUpload(completeMultipartUploadRequest); } public static void multipartUploadTest(S3Client s3, String bucketName, String key, String localFilePath) { System.out.println("Starting multipart upload for: " + key); try { String uploadId = createMultipartUpload(s3, bucketName, key); System.out.println(uploadId); ListCompletedPart parts = multipartUpload(s3, bucketName, key, uploadId, localFilePath); completeMultipartUpload(s3, bucketName, key, uploadId, parts); System.out.println("Multipart upload completed for: " + key); } catch (Exception e) { System.err.println(e.getMessage()); System.exit(1); } }
SDK for Python

Die folgenden Beispiele zeigen, wie Sie einen mehrteiligen Upload mit dem SDK für Python abschließen.

def complete_multipart_upload(s3_client, bucket_name, key_name, mpu_id, part_list): ''' Completes a multipart upload to a directory bucket :param s3_client: boto3 S3 client :param bucket_name: The destination bucket for the multipart upload :param key_name: The key name for the object to be uploaded :param mpu_id: The UploadId returned from the create_multipart_upload call :param part_list: The list of uploaded part numbers with their associated ETags :return: True if the multipart upload was completed successfully, else False ''' try: s3_client.complete_multipart_upload( Bucket = bucket_name, Key = key_name, UploadId = mpu_id, MultipartUpload = { 'Parts': part_list } ) except ClientError as e: logging.error(e) return False return True if __name__ == '__main__': MB = 1024 ** 2 region = 'us-west-2' bucket_name = 'BUCKET_NAME' key_name = 'OBJECT_NAME' part_size = 10 * MB s3_client = boto3.client('s3', region_name = region) mpu_id = create_multipart_upload(s3_client, bucket_name, key_name) if mpu_id is not None: part_list = multipart_upload(s3_client, bucket_name, key_name, mpu_id, part_size) if part_list is not None: if complete_multipart_upload(s3_client, bucket_name, key_name, mpu_id, part_list): print (f'{key_name} successfully uploaded through a ultipart upload to {bucket_name}') else: print (f'Could not upload {key_name} hrough a multipart upload to {bucket_name}')

Die folgenden Beispiele zeigen, wie Sie einen mehrteiligen Upload mit dem SDK für Java 2.x abschließen.

/** * This method completes the multipart upload request by collating all the upload parts * @param s3 * @param bucketName - for example, 'doc-example-bucket--usw2-az1--x-s3' * @param key * @param uploadId * @param uploadParts */ private static void completeMultipartUpload(S3Client s3, String bucketName, String key, String uploadId, ListCompletedPart uploadParts) { CompletedMultipartUpload completedMultipartUpload = CompletedMultipartUpload.builder() .parts(uploadParts) .build(); CompleteMultipartUploadRequest completeMultipartUploadRequest = CompleteMultipartUploadRequest.builder() .bucket(bucketName) .key(key) .uploadId(uploadId) .multipartUpload(completedMultipartUpload) .build(); s3.completeMultipartUpload(completeMultipartUploadRequest); } public static void multipartUploadTest(S3Client s3, String bucketName, String key, String localFilePath) { System.out.println("Starting multipart upload for: " + key); try { String uploadId = createMultipartUpload(s3, bucketName, key); System.out.println(uploadId); ListCompletedPart parts = multipartUpload(s3, bucketName, key, uploadId, localFilePath); completeMultipartUpload(s3, bucketName, key, uploadId, parts); System.out.println("Multipart upload completed for: " + key); } catch (Exception e) { System.err.println(e.getMessage()); System.exit(1); } }

Dieses Beispiel veranschaulicht, wie Sie einen mehrteiligen Upload für einen Verzeichnis-Bucket mit der AWS CLI abschließen. Um den Befehl zu verwenden, ersetzen Sie die user input placeholders durch Ihre eigenen Informationen.

aws s3api complete-multipart-upload --bucket bucket-base-name--zone-id--x-s3 --key KEY_NAME --upload-id "AS_mgt9RaQE9GEaifATue15dAAAAAAAAAAEMAAAAAAAAADQwNzI4MDU0MjUyMBYAAAAAAAAAAA0AAAAAAAAAAAH2AfYAAAAAAAAEBSD0WBKMAQAAAABneY9yBVsK89iFkvWdQhRCcXohE8RbYtc9QvBOG8tNpA" --multipart-upload file://parts.json

In diesem Beispiel wird eine JSON-Struktur verwendet, die die Teile des mehrteiligen Uploads beschreibt, die wieder zur vollständigen Datei zusammengefügt werden sollen. In diesem Beispiel wird das Präfix file:// verwendet, um die JSON-Struktur aus einer Datei im lokalen Ordner mit dem Namen parts zu laden.

parts.json:

parts.json { "Parts": [ { "ETag": "6b78c4a64dd641a58dac8d9258b88147", "PartNumber": 1 } ] }

Weitere Informationen finden Sie unter complete-multipart-upload im AWS Command Line Interface.

Dieses Beispiel veranschaulicht, wie Sie einen mehrteiligen Upload für einen Verzeichnis-Bucket mit der AWS CLI abschließen. Um den Befehl zu verwenden, ersetzen Sie die user input placeholders durch Ihre eigenen Informationen.

aws s3api complete-multipart-upload --bucket bucket-base-name--zone-id--x-s3 --key KEY_NAME --upload-id "AS_mgt9RaQE9GEaifATue15dAAAAAAAAAAEMAAAAAAAAADQwNzI4MDU0MjUyMBYAAAAAAAAAAA0AAAAAAAAAAAH2AfYAAAAAAAAEBSD0WBKMAQAAAABneY9yBVsK89iFkvWdQhRCcXohE8RbYtc9QvBOG8tNpA" --multipart-upload file://parts.json

In diesem Beispiel wird eine JSON-Struktur verwendet, die die Teile des mehrteiligen Uploads beschreibt, die wieder zur vollständigen Datei zusammengefügt werden sollen. In diesem Beispiel wird das Präfix file:// verwendet, um die JSON-Struktur aus einer Datei im lokalen Ordner mit dem Namen parts zu laden.

parts.json:

parts.json { "Parts": [ { "ETag": "6b78c4a64dd641a58dac8d9258b88147", "PartNumber": 1 } ] }

Weitere Informationen finden Sie unter complete-multipart-upload im AWS Command Line Interface.

Abbrechen eines mehrteiligen Uploads

Die folgenden Beispiele veranschaulichen, wie Sie einen mehrteiligen Upload abbrechen.

SDK for Java 2.x

Das folgende Beispiel zeigt, wie Sie einen mehrteiligen Upload mit dem SDK für Java 2.x abbrechen.

public static void abortMultiPartUploads( S3Client s3, String bucketName ) { try { ListMultipartUploadsRequest listMultipartUploadsRequest = ListMultipartUploadsRequest.builder() .bucket(bucketName) .build(); ListMultipartUploadsResponse response = s3.listMultipartUploads(listMultipartUploadsRequest); ListMultipartUpload uploads = response.uploads(); AbortMultipartUploadRequest abortMultipartUploadRequest; for (MultipartUpload upload: uploads) { abortMultipartUploadRequest = AbortMultipartUploadRequest.builder() .bucket(bucketName) .key(upload.key()) .uploadId(upload.uploadId()) .build(); s3.abortMultipartUpload(abortMultipartUploadRequest); } } catch (S3Exception e) { System.err.println(e.getMessage()); System.exit(1); } }
SDK for Python

Das folgende Beispiel zeigt, wie Sie einen mehrteiligen Upload mit dem SDK für Python abbrechen.

import logging import boto3 from botocore.exceptions import ClientError def abort_multipart_upload(s3_client, bucket_name, key_name, upload_id): ''' Aborts a partial multipart upload in a directory bucket. :param s3_client: boto3 S3 client :param bucket_name: Bucket where the multipart upload was initiated - for example, 'doc-example-bucket--usw2-az1--x-s3' :param key_name: Name of the object for which the multipart upload needs to be aborted :param upload_id: Multipart upload ID for the multipart upload to be aborted :return: True if the multipart upload was successfully aborted, False if not ''' try: s3_client.abort_multipart_upload( Bucket = bucket_name, Key = key_name, UploadId = upload_id ) except ClientError as e: logging.error(e) return False return True if __name__ == '__main__': region = 'us-west-2' bucket_name = 'BUCKET_NAME' key_name = 'KEY_NAME' upload_id = 'UPLOAD_ID' s3_client = boto3.client('s3', region_name = region) if abort_multipart_upload(s3_client, bucket_name, key_name, upload_id): print (f'Multipart upload for object {key_name} in {bucket_name} bucket has been aborted') else: print (f'Unable to abort multipart upload for object {key_name} in {bucket_name} bucket')

SDK for Java 2.x

Das folgende Beispiel zeigt, wie Sie einen mehrteiligen Upload mit dem SDK für Java 2.x abbrechen.

public static void abortMultiPartUploads( S3Client s3, String bucketName ) { try { ListMultipartUploadsRequest listMultipartUploadsRequest = ListMultipartUploadsRequest.builder() .bucket(bucketName) .build(); ListMultipartUploadsResponse response = s3.listMultipartUploads(listMultipartUploadsRequest); ListMultipartUpload uploads = response.uploads(); AbortMultipartUploadRequest abortMultipartUploadRequest; for (MultipartUpload upload: uploads) { abortMultipartUploadRequest = AbortMultipartUploadRequest.builder() .bucket(bucketName) .key(upload.key()) .uploadId(upload.uploadId()) .build(); s3.abortMultipartUpload(abortMultipartUploadRequest); } } catch (S3Exception e) { System.err.println(e.getMessage()); System.exit(1); } }
SDK for Python

Das folgende Beispiel zeigt, wie Sie einen mehrteiligen Upload mit dem SDK für Python abbrechen.

import logging import boto3 from botocore.exceptions import ClientError def abort_multipart_upload(s3_client, bucket_name, key_name, upload_id): ''' Aborts a partial multipart upload in a directory bucket. :param s3_client: boto3 S3 client :param bucket_name: Bucket where the multipart upload was initiated - for example, 'doc-example-bucket--usw2-az1--x-s3' :param key_name: Name of the object for which the multipart upload needs to be aborted :param upload_id: Multipart upload ID for the multipart upload to be aborted :return: True if the multipart upload was successfully aborted, False if not ''' try: s3_client.abort_multipart_upload( Bucket = bucket_name, Key = key_name, UploadId = upload_id ) except ClientError as e: logging.error(e) return False return True if __name__ == '__main__': region = 'us-west-2' bucket_name = 'BUCKET_NAME' key_name = 'KEY_NAME' upload_id = 'UPLOAD_ID' s3_client = boto3.client('s3', region_name = region) if abort_multipart_upload(s3_client, bucket_name, key_name, upload_id): print (f'Multipart upload for object {key_name} in {bucket_name} bucket has been aborted') else: print (f'Unable to abort multipart upload for object {key_name} in {bucket_name} bucket')

Das folgende Beispiel zeigt, wie Sie einen mehrteiligen Upload mit dem SDK für Java 2.x abbrechen.

public static void abortMultiPartUploads( S3Client s3, String bucketName ) { try { ListMultipartUploadsRequest listMultipartUploadsRequest = ListMultipartUploadsRequest.builder() .bucket(bucketName) .build(); ListMultipartUploadsResponse response = s3.listMultipartUploads(listMultipartUploadsRequest); ListMultipartUpload uploads = response.uploads(); AbortMultipartUploadRequest abortMultipartUploadRequest; for (MultipartUpload upload: uploads) { abortMultipartUploadRequest = AbortMultipartUploadRequest.builder() .bucket(bucketName) .key(upload.key()) .uploadId(upload.uploadId()) .build(); s3.abortMultipartUpload(abortMultipartUploadRequest); } } catch (S3Exception e) { System.err.println(e.getMessage()); System.exit(1); } }

Das folgende Beispiel veranschaulicht, wie Sie einen mehrteiligen Upload über die AWS CLI abbrechen. Um den Befehl zu verwenden, ersetzen Sie die user input placeholders durch Ihre eigenen Informationen.

aws s3api abort-multipart-upload --bucket bucket-base-name--zone-id--x-s3 --key KEY_NAME --upload-id "AS_mgt9RaQE9GEaifATue15dAAAAAAAAAAEMAAAAAAAAADQwNzI4MDU0MjUyMBYAAAAAAAAAAA0AAAAAAAAAAAH2AfYAAAAAAAAEAX5hFw-MAQAAAAB0OxUFeA7LTbWWFS8WYwhrxDxTIDN-pdEEq_agIHqsbg"

Weitere Informationen finden Sie unter abort-multipart-upload im AWS Command Line Interface.

Das folgende Beispiel veranschaulicht, wie Sie einen mehrteiligen Upload über die AWS CLI abbrechen. Um den Befehl zu verwenden, ersetzen Sie die user input placeholders durch Ihre eigenen Informationen.

aws s3api abort-multipart-upload --bucket bucket-base-name--zone-id--x-s3 --key KEY_NAME --upload-id "AS_mgt9RaQE9GEaifATue15dAAAAAAAAAAEMAAAAAAAAADQwNzI4MDU0MjUyMBYAAAAAAAAAAA0AAAAAAAAAAAH2AfYAAAAAAAAEAX5hFw-MAQAAAAB0OxUFeA7LTbWWFS8WYwhrxDxTIDN-pdEEq_agIHqsbg"

Weitere Informationen finden Sie unter abort-multipart-upload im AWS Command Line Interface.

Erstellen eines mehrteiligen Upload-Kopiervorgangs

Anmerkung
  • Um neue Objektteilkopien in einem Verzeichnis-Bucket mit SSE-KMS zu verschlüsseln, müssen Sie SSE-KMS als Standardverschlüsselungskonfiguration des Verzeichnis-Buckets mit einem KMS-Schlüssel (also einem vom Kunden verwalteten Schlüssel) angeben. Der Von AWS verwalteter Schlüssel (aws/s3) wird nicht unterstützt. Ihre SSE-KMS-Konfiguration kann für die gesamte Lebensdauer des Buckets nur einen vom Kunden verwalteten Schlüssel pro Verzeichnis-Bucket unterstützen. Nachdem Sie einen vom Kunden verwalteten Schlüssel für SSE-KMS angegeben haben, können Sie den vom Kunden verwalteten Schlüssel für die SSE-KMS-Konfiguration des Buckets nicht mehr überschreiben. Sie können keine serverseitigen Verschlüsselungseinstellungen für neue Objektteilkopien mit SSE-KMS in den UploadPartCopyAnforderungsheadern angeben. Außerdem müssen die Anforderungs-Header, die Sie in der CreateMultipartUpload-Anforderung angeben, der Standardverschlüsselungskonfiguration des Ziel-Buckets entsprechen.

  • S3-Bucket-Keys werden nicht unterstützt, wenn Sie mit SSE-KMS verschlüsselte Objekte von Allzweck-Buckets in Verzeichnis-Buckets, von Verzeichnis-Buckets in Allzweck-Buckets oder zwischen Verzeichnis-Buckets kopieren UploadPartCopy. In diesem Fall ruft Amazon S3 AWS KMS jedes Mal, wenn eine Kopieranforderung für ein KMS-verschlüsseltes Objekt gestellt wird, auf.

Die folgenden Beispiele zeigen, wie Objekte von einem Bucket in einen anderen mithilfe eines mehrteiligen Uploads kopiert werden können.

SDK for Java 2.x

Das folgende Beispiel zeigt, wie Sie einen mehrteiligen Upload verwenden, um ein Objekt mithilfe des SDK für Java 2.x programmgesteuert von einem Bucket in einen anderen zu kopieren.

/** * This method creates a multipart upload request that generates a unique upload ID that is used to track * all the upload parts. * * @param s3 * @param bucketName * @param key * @return */ private static String createMultipartUpload(S3Client s3, String bucketName, String key) { CreateMultipartUploadRequest createMultipartUploadRequest = CreateMultipartUploadRequest.builder() .bucket(bucketName) .key(key) .build(); String uploadId = null; try { CreateMultipartUploadResponse response = s3.createMultipartUpload(createMultipartUploadRequest); uploadId = response.uploadId(); } catch (S3Exception e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } return uploadId; } /** * Creates copy parts based on source object size and copies over individual parts * * @param s3 * @param sourceBucket * @param sourceKey * @param destnBucket * @param destnKey * @param uploadId * @return * @throws IOException */ public static ListCompletedPart multipartUploadCopy(S3Client s3, String sourceBucket, String sourceKey, String destnBucket, String destnKey, String uploadId) throws IOException { // Get the object size to track the end of the copy operation. HeadObjectRequest headObjectRequest = HeadObjectRequest .builder() .bucket(sourceBucket) .key(sourceKey) .build(); HeadObjectResponse response = s3.headObject(headObjectRequest); Long objectSize = response.contentLength(); System.out.println("Source Object size: " + objectSize); // Copy the object using 20 MB parts. long partSize = 20 * 1024 * 1024; long bytePosition = 0; int partNum = 1; ListCompletedPart completedParts = new ArrayList<>(); while (bytePosition < objectSize) { // The last part might be smaller than partSize, so check to make sure // that lastByte isn't beyond the end of the object. long lastByte = Math.min(bytePosition + partSize - 1, objectSize - 1); System.out.println("part no: " + partNum + ", bytePosition: " + bytePosition + ", lastByte: " + lastByte); // Copy this part. UploadPartCopyRequest req = UploadPartCopyRequest.builder() .uploadId(uploadId) .sourceBucket(sourceBucket) .sourceKey(sourceKey) .destinationBucket(destnBucket) .destinationKey(destnKey) .copySourceRange("bytes="+bytePosition+"-"+lastByte) .partNumber(partNum) .build(); UploadPartCopyResponse res = s3.uploadPartCopy(req); CompletedPart part = CompletedPart.builder() .partNumber(partNum) .eTag(res.copyPartResult().eTag()) .build(); completedParts.add(part); partNum++; bytePosition += partSize; } return completedParts; } public static void multipartCopyUploadTest(S3Client s3, String srcBucket, String srcKey, String destnBucket, String destnKey) { System.out.println("Starting multipart copy for: " + srcKey); try { String uploadId = createMultipartUpload(s3, destnBucket, destnKey); System.out.println(uploadId); ListCompletedPart parts = multipartUploadCopy(s3, srcBucket, srcKey,destnBucket, destnKey, uploadId); completeMultipartUpload(s3, destnBucket, destnKey, uploadId, parts); System.out.println("Multipart copy completed for: " + srcKey); } catch (Exception e) { System.err.println(e.getMessage()); System.exit(1); } }
SDK for Python

Das folgende Beispiel zeigt, wie Sie einen mehrteiligen Upload verwenden, um ein Objekt mithilfe des SDK für Python programmgesteuert von einem Bucket in einen anderen zu kopieren.

import logging import boto3 from botocore.exceptions import ClientError def head_object(s3_client, bucket_name, key_name): ''' Returns metadata for an object in a directory bucket :param s3_client: boto3 S3 client :param bucket_name: Bucket that contains the object to query for metadata :param key_name: Key name to query for metadata :return: Metadata for the specified object if successful, else None ''' try: response = s3_client.head_object( Bucket = bucket_name, Key = key_name ) return response except ClientError as e: logging.error(e) return None def create_multipart_upload(s3_client, bucket_name, key_name): ''' Create a multipart upload to a directory bucket :param s3_client: boto3 S3 client :param bucket_name: Destination bucket for the multipart upload :param key_name: Key name of the object to be uploaded :return: UploadId for the multipart upload if created successfully, else None ''' try: mpu = s3_client.create_multipart_upload(Bucket = bucket_name, Key = key_name) return mpu['UploadId'] except ClientError as e: logging.error(e) return None def multipart_copy_upload(s3_client, source_bucket_name, key_name, target_bucket_name, mpu_id, part_size): ''' Copy an object in a directory bucket to another bucket in multiple parts of a specified size :param s3_client: boto3 S3 client :param source_bucket_name: Bucket where the source object exists :param key_name: Key name of the object to be copied :param target_bucket_name: Destination bucket for copied object :param mpu_id: The UploadId returned from the create_multipart_upload call :param part_size: The size parts that the object will be broken into, in bytes. Minimum 5 MiB, Maximum 5 GiB. There is no minimum size for the last part of your multipart upload. :return: part_list for the multipart copy if all parts are copied successfully, else None ''' part_list = [] copy_source = { 'Bucket': source_bucket_name, 'Key': key_name } try: part_counter = 1 object_size = head_object(s3_client, source_bucket_name, key_name) if object_size is not None: object_size = object_size['ContentLength'] while (part_counter - 1) * part_size <object_size: bytes_start = (part_counter - 1) * part_size bytes_end = (part_counter * part_size) - 1 upload_copy_part = s3_client.upload_part_copy ( Bucket = target_bucket_name, CopySource = copy_source, CopySourceRange = f'bytes={bytes_start}-{bytes_end}', Key = key_name, PartNumber = part_counter, UploadId = mpu_id ) part_list.append({'PartNumber': part_counter, 'ETag': upload_copy_part['CopyPartResult']['ETag']}) part_counter += 1 except ClientError as e: logging.error(e) return None return part_list def complete_multipart_upload(s3_client, bucket_name, key_name, mpu_id, part_list): ''' Completes a multipart upload to a directory bucket :param s3_client: boto3 S3 client :param bucket_name: Destination bucket for the multipart upload :param key_name: Key name of the object to be uploaded :param mpu_id: The UploadId returned from the create_multipart_upload call :param part_list: List of uploaded part numbers with associated ETags :return: True if the multipart upload was completed successfully, else False ''' try: s3_client.complete_multipart_upload( Bucket = bucket_name, Key = key_name, UploadId = mpu_id, MultipartUpload = { 'Parts': part_list } ) except ClientError as e: logging.error(e) return False return True if __name__ == '__main__': MB = 1024 ** 2 region = 'us-west-2' source_bucket_name = 'SOURCE_BUCKET_NAME' target_bucket_name = 'TARGET_BUCKET_NAME' key_name = 'KEY_NAME' part_size = 10 * MB s3_client = boto3.client('s3', region_name = region) mpu_id = create_multipart_upload(s3_client, target_bucket_name, key_name) if mpu_id is not None: part_list = multipart_copy_upload(s3_client, source_bucket_name, key_name, target_bucket_name, mpu_id, part_size) if part_list is not None: if complete_multipart_upload(s3_client, target_bucket_name, key_name, mpu_id, part_list): print (f'{key_name} successfully copied through multipart copy from {source_bucket_name} to {target_bucket_name}') else: print (f'Could not copy {key_name} through multipart copy from {source_bucket_name} to {target_bucket_name}')

SDK for Java 2.x

Das folgende Beispiel zeigt, wie Sie einen mehrteiligen Upload verwenden, um ein Objekt mithilfe des SDK für Java 2.x programmgesteuert von einem Bucket in einen anderen zu kopieren.

/** * This method creates a multipart upload request that generates a unique upload ID that is used to track * all the upload parts. * * @param s3 * @param bucketName * @param key * @return */ private static String createMultipartUpload(S3Client s3, String bucketName, String key) { CreateMultipartUploadRequest createMultipartUploadRequest = CreateMultipartUploadRequest.builder() .bucket(bucketName) .key(key) .build(); String uploadId = null; try { CreateMultipartUploadResponse response = s3.createMultipartUpload(createMultipartUploadRequest); uploadId = response.uploadId(); } catch (S3Exception e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } return uploadId; } /** * Creates copy parts based on source object size and copies over individual parts * * @param s3 * @param sourceBucket * @param sourceKey * @param destnBucket * @param destnKey * @param uploadId * @return * @throws IOException */ public static ListCompletedPart multipartUploadCopy(S3Client s3, String sourceBucket, String sourceKey, String destnBucket, String destnKey, String uploadId) throws IOException { // Get the object size to track the end of the copy operation. HeadObjectRequest headObjectRequest = HeadObjectRequest .builder() .bucket(sourceBucket) .key(sourceKey) .build(); HeadObjectResponse response = s3.headObject(headObjectRequest); Long objectSize = response.contentLength(); System.out.println("Source Object size: " + objectSize); // Copy the object using 20 MB parts. long partSize = 20 * 1024 * 1024; long bytePosition = 0; int partNum = 1; ListCompletedPart completedParts = new ArrayList<>(); while (bytePosition < objectSize) { // The last part might be smaller than partSize, so check to make sure // that lastByte isn't beyond the end of the object. long lastByte = Math.min(bytePosition + partSize - 1, objectSize - 1); System.out.println("part no: " + partNum + ", bytePosition: " + bytePosition + ", lastByte: " + lastByte); // Copy this part. UploadPartCopyRequest req = UploadPartCopyRequest.builder() .uploadId(uploadId) .sourceBucket(sourceBucket) .sourceKey(sourceKey) .destinationBucket(destnBucket) .destinationKey(destnKey) .copySourceRange("bytes="+bytePosition+"-"+lastByte) .partNumber(partNum) .build(); UploadPartCopyResponse res = s3.uploadPartCopy(req); CompletedPart part = CompletedPart.builder() .partNumber(partNum) .eTag(res.copyPartResult().eTag()) .build(); completedParts.add(part); partNum++; bytePosition += partSize; } return completedParts; } public static void multipartCopyUploadTest(S3Client s3, String srcBucket, String srcKey, String destnBucket, String destnKey) { System.out.println("Starting multipart copy for: " + srcKey); try { String uploadId = createMultipartUpload(s3, destnBucket, destnKey); System.out.println(uploadId); ListCompletedPart parts = multipartUploadCopy(s3, srcBucket, srcKey,destnBucket, destnKey, uploadId); completeMultipartUpload(s3, destnBucket, destnKey, uploadId, parts); System.out.println("Multipart copy completed for: " + srcKey); } catch (Exception e) { System.err.println(e.getMessage()); System.exit(1); } }
SDK for Python

Das folgende Beispiel zeigt, wie Sie einen mehrteiligen Upload verwenden, um ein Objekt mithilfe des SDK für Python programmgesteuert von einem Bucket in einen anderen zu kopieren.

import logging import boto3 from botocore.exceptions import ClientError def head_object(s3_client, bucket_name, key_name): ''' Returns metadata for an object in a directory bucket :param s3_client: boto3 S3 client :param bucket_name: Bucket that contains the object to query for metadata :param key_name: Key name to query for metadata :return: Metadata for the specified object if successful, else None ''' try: response = s3_client.head_object( Bucket = bucket_name, Key = key_name ) return response except ClientError as e: logging.error(e) return None def create_multipart_upload(s3_client, bucket_name, key_name): ''' Create a multipart upload to a directory bucket :param s3_client: boto3 S3 client :param bucket_name: Destination bucket for the multipart upload :param key_name: Key name of the object to be uploaded :return: UploadId for the multipart upload if created successfully, else None ''' try: mpu = s3_client.create_multipart_upload(Bucket = bucket_name, Key = key_name) return mpu['UploadId'] except ClientError as e: logging.error(e) return None def multipart_copy_upload(s3_client, source_bucket_name, key_name, target_bucket_name, mpu_id, part_size): ''' Copy an object in a directory bucket to another bucket in multiple parts of a specified size :param s3_client: boto3 S3 client :param source_bucket_name: Bucket where the source object exists :param key_name: Key name of the object to be copied :param target_bucket_name: Destination bucket for copied object :param mpu_id: The UploadId returned from the create_multipart_upload call :param part_size: The size parts that the object will be broken into, in bytes. Minimum 5 MiB, Maximum 5 GiB. There is no minimum size for the last part of your multipart upload. :return: part_list for the multipart copy if all parts are copied successfully, else None ''' part_list = [] copy_source = { 'Bucket': source_bucket_name, 'Key': key_name } try: part_counter = 1 object_size = head_object(s3_client, source_bucket_name, key_name) if object_size is not None: object_size = object_size['ContentLength'] while (part_counter - 1) * part_size <object_size: bytes_start = (part_counter - 1) * part_size bytes_end = (part_counter * part_size) - 1 upload_copy_part = s3_client.upload_part_copy ( Bucket = target_bucket_name, CopySource = copy_source, CopySourceRange = f'bytes={bytes_start}-{bytes_end}', Key = key_name, PartNumber = part_counter, UploadId = mpu_id ) part_list.append({'PartNumber': part_counter, 'ETag': upload_copy_part['CopyPartResult']['ETag']}) part_counter += 1 except ClientError as e: logging.error(e) return None return part_list def complete_multipart_upload(s3_client, bucket_name, key_name, mpu_id, part_list): ''' Completes a multipart upload to a directory bucket :param s3_client: boto3 S3 client :param bucket_name: Destination bucket for the multipart upload :param key_name: Key name of the object to be uploaded :param mpu_id: The UploadId returned from the create_multipart_upload call :param part_list: List of uploaded part numbers with associated ETags :return: True if the multipart upload was completed successfully, else False ''' try: s3_client.complete_multipart_upload( Bucket = bucket_name, Key = key_name, UploadId = mpu_id, MultipartUpload = { 'Parts': part_list } ) except ClientError as e: logging.error(e) return False return True if __name__ == '__main__': MB = 1024 ** 2 region = 'us-west-2' source_bucket_name = 'SOURCE_BUCKET_NAME' target_bucket_name = 'TARGET_BUCKET_NAME' key_name = 'KEY_NAME' part_size = 10 * MB s3_client = boto3.client('s3', region_name = region) mpu_id = create_multipart_upload(s3_client, target_bucket_name, key_name) if mpu_id is not None: part_list = multipart_copy_upload(s3_client, source_bucket_name, key_name, target_bucket_name, mpu_id, part_size) if part_list is not None: if complete_multipart_upload(s3_client, target_bucket_name, key_name, mpu_id, part_list): print (f'{key_name} successfully copied through multipart copy from {source_bucket_name} to {target_bucket_name}') else: print (f'Could not copy {key_name} through multipart copy from {source_bucket_name} to {target_bucket_name}')

Das folgende Beispiel zeigt, wie Sie einen mehrteiligen Upload verwenden, um ein Objekt mithilfe des SDK für Java 2.x programmgesteuert von einem Bucket in einen anderen zu kopieren.

/** * This method creates a multipart upload request that generates a unique upload ID that is used to track * all the upload parts. * * @param s3 * @param bucketName * @param key * @return */ private static String createMultipartUpload(S3Client s3, String bucketName, String key) { CreateMultipartUploadRequest createMultipartUploadRequest = CreateMultipartUploadRequest.builder() .bucket(bucketName) .key(key) .build(); String uploadId = null; try { CreateMultipartUploadResponse response = s3.createMultipartUpload(createMultipartUploadRequest); uploadId = response.uploadId(); } catch (S3Exception e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } return uploadId; } /** * Creates copy parts based on source object size and copies over individual parts * * @param s3 * @param sourceBucket * @param sourceKey * @param destnBucket * @param destnKey * @param uploadId * @return * @throws IOException */ public static ListCompletedPart multipartUploadCopy(S3Client s3, String sourceBucket, String sourceKey, String destnBucket, String destnKey, String uploadId) throws IOException { // Get the object size to track the end of the copy operation. HeadObjectRequest headObjectRequest = HeadObjectRequest .builder() .bucket(sourceBucket) .key(sourceKey) .build(); HeadObjectResponse response = s3.headObject(headObjectRequest); Long objectSize = response.contentLength(); System.out.println("Source Object size: " + objectSize); // Copy the object using 20 MB parts. long partSize = 20 * 1024 * 1024; long bytePosition = 0; int partNum = 1; ListCompletedPart completedParts = new ArrayList<>(); while (bytePosition < objectSize) { // The last part might be smaller than partSize, so check to make sure // that lastByte isn't beyond the end of the object. long lastByte = Math.min(bytePosition + partSize - 1, objectSize - 1); System.out.println("part no: " + partNum + ", bytePosition: " + bytePosition + ", lastByte: " + lastByte); // Copy this part. UploadPartCopyRequest req = UploadPartCopyRequest.builder() .uploadId(uploadId) .sourceBucket(sourceBucket) .sourceKey(sourceKey) .destinationBucket(destnBucket) .destinationKey(destnKey) .copySourceRange("bytes="+bytePosition+"-"+lastByte) .partNumber(partNum) .build(); UploadPartCopyResponse res = s3.uploadPartCopy(req); CompletedPart part = CompletedPart.builder() .partNumber(partNum) .eTag(res.copyPartResult().eTag()) .build(); completedParts.add(part); partNum++; bytePosition += partSize; } return completedParts; } public static void multipartCopyUploadTest(S3Client s3, String srcBucket, String srcKey, String destnBucket, String destnKey) { System.out.println("Starting multipart copy for: " + srcKey); try { String uploadId = createMultipartUpload(s3, destnBucket, destnKey); System.out.println(uploadId); ListCompletedPart parts = multipartUploadCopy(s3, srcBucket, srcKey,destnBucket, destnKey, uploadId); completeMultipartUpload(s3, destnBucket, destnKey, uploadId, parts); System.out.println("Multipart copy completed for: " + srcKey); } catch (Exception e) { System.err.println(e.getMessage()); System.exit(1); } }

Das folgende Beispiel zeigt, wie Sie einen mehrteiligen Upload verwenden können, um programmgesteuert ein Objekt von einem Bucket in einen Verzeichnis-Bucket mithilfe der AWS CLI zu kopieren. Um den Befehl zu verwenden, ersetzen Sie die user input placeholders durch Ihre eigenen Informationen.

aws s3api upload-part-copy --bucket bucket-base-name--zone-id--x-s3 --key TARGET_KEY_NAME --copy-source SOURCE_BUCKET_NAME/SOURCE_KEY_NAME --part-number 1 --upload-id "AS_mgt9RaQE9GEaifATue15dAAAAAAAAAAEMAAAAAAAAADQwNzI4MDU0MjUyMBYAAAAAAAAAAA0AAAAAAAAAAAH2AfYAAAAAAAAEBnJ4cxKMAQAAAABiNXpOFVZJ1tZcKWib9YKE1C565_hCkDJ_4AfCap2svg"

Weitere Informationen finden Sie unter upload-part-copy im AWS Command Line Interface.

Das folgende Beispiel zeigt, wie Sie einen mehrteiligen Upload verwenden können, um programmgesteuert ein Objekt von einem Bucket in einen Verzeichnis-Bucket mithilfe der AWS CLI zu kopieren. Um den Befehl zu verwenden, ersetzen Sie die user input placeholders durch Ihre eigenen Informationen.

aws s3api upload-part-copy --bucket bucket-base-name--zone-id--x-s3 --key TARGET_KEY_NAME --copy-source SOURCE_BUCKET_NAME/SOURCE_KEY_NAME --part-number 1 --upload-id "AS_mgt9RaQE9GEaifATue15dAAAAAAAAAAEMAAAAAAAAADQwNzI4MDU0MjUyMBYAAAAAAAAAAA0AAAAAAAAAAAH2AfYAAAAAAAAEBnJ4cxKMAQAAAABiNXpOFVZJ1tZcKWib9YKE1C565_hCkDJ_4AfCap2svg"

Weitere Informationen finden Sie unter upload-part-copy im AWS Command Line Interface.

Auflisten laufender mehrteiliger Uploads

Um laufende mehrteilige Uploads in einen Verzeichnis-Bucket aufzulisten, können Sie den AWS SDKs, oder den verwenden. AWS CLI

SDK for Java 2.x

Die folgenden Beispiele zeigen, wie Sie laufende (unvollständige) mehrteilige Uploads mithilfe des SDK für Java 2.x auflisten können.

public static void listMultiPartUploads( S3Client s3, String bucketName) { try { ListMultipartUploadsRequest listMultipartUploadsRequest = ListMultipartUploadsRequest.builder() .bucket(bucketName) .build(); ListMultipartUploadsResponse response = s3.listMultipartUploads(listMultipartUploadsRequest); List MultipartUpload uploads = response.uploads(); for (MultipartUpload upload: uploads) { System.out.println("Upload in progress: Key = \"" + upload.key() + "\", id = " + upload.uploadId()); } } catch (S3Exception e) { System.err.println(e.getMessage()); System.exit(1); } }
SDK for Python

Die folgenden Beispiele zeigen, wie Sie laufende (unvollständige) mehrteilige Uploads mithilfe des SDK für Python auflisten können.

import logging import boto3 from botocore.exceptions import ClientError def list_multipart_uploads(s3_client, bucket_name): ''' List any incomplete multipart uploads in a directory bucket in e specified gion :param s3_client: boto3 S3 client :param bucket_name: Bucket to check for incomplete multipart uploads :return: List of incomplete multipart uploads if there are any, None if not ''' try: response = s3_client.list_multipart_uploads(Bucket = bucket_name) if 'Uploads' in response.keys(): return response['Uploads'] else: return None except ClientError as e: logging.error(e) if __name__ == '__main__': bucket_name = 'BUCKET_NAME' region = 'us-west-2' s3_client = boto3.client('s3', region_name = region) multipart_uploads = list_multipart_uploads(s3_client, bucket_name) if multipart_uploads is not None: print (f'There are {len(multipart_uploads)} ncomplete multipart uploads for {bucket_name}') else: print (f'There are no incomplete multipart uploads for {bucket_name}')

SDK for Java 2.x

Die folgenden Beispiele zeigen, wie Sie laufende (unvollständige) mehrteilige Uploads mithilfe des SDK für Java 2.x auflisten können.

public static void listMultiPartUploads( S3Client s3, String bucketName) { try { ListMultipartUploadsRequest listMultipartUploadsRequest = ListMultipartUploadsRequest.builder() .bucket(bucketName) .build(); ListMultipartUploadsResponse response = s3.listMultipartUploads(listMultipartUploadsRequest); List MultipartUpload uploads = response.uploads(); for (MultipartUpload upload: uploads) { System.out.println("Upload in progress: Key = \"" + upload.key() + "\", id = " + upload.uploadId()); } } catch (S3Exception e) { System.err.println(e.getMessage()); System.exit(1); } }
SDK for Python

Die folgenden Beispiele zeigen, wie Sie laufende (unvollständige) mehrteilige Uploads mithilfe des SDK für Python auflisten können.

import logging import boto3 from botocore.exceptions import ClientError def list_multipart_uploads(s3_client, bucket_name): ''' List any incomplete multipart uploads in a directory bucket in e specified gion :param s3_client: boto3 S3 client :param bucket_name: Bucket to check for incomplete multipart uploads :return: List of incomplete multipart uploads if there are any, None if not ''' try: response = s3_client.list_multipart_uploads(Bucket = bucket_name) if 'Uploads' in response.keys(): return response['Uploads'] else: return None except ClientError as e: logging.error(e) if __name__ == '__main__': bucket_name = 'BUCKET_NAME' region = 'us-west-2' s3_client = boto3.client('s3', region_name = region) multipart_uploads = list_multipart_uploads(s3_client, bucket_name) if multipart_uploads is not None: print (f'There are {len(multipart_uploads)} ncomplete multipart uploads for {bucket_name}') else: print (f'There are no incomplete multipart uploads for {bucket_name}')

Die folgenden Beispiele zeigen, wie Sie laufende (unvollständige) mehrteilige Uploads mithilfe des SDK für Java 2.x auflisten können.

public static void listMultiPartUploads( S3Client s3, String bucketName) { try { ListMultipartUploadsRequest listMultipartUploadsRequest = ListMultipartUploadsRequest.builder() .bucket(bucketName) .build(); ListMultipartUploadsResponse response = s3.listMultipartUploads(listMultipartUploadsRequest); List MultipartUpload uploads = response.uploads(); for (MultipartUpload upload: uploads) { System.out.println("Upload in progress: Key = \"" + upload.key() + "\", id = " + upload.uploadId()); } } catch (S3Exception e) { System.err.println(e.getMessage()); System.exit(1); } }

Die folgenden Beispiele zeigen, wie Sie laufende (unvollständige) mehrteilige Uploads mithilfe der AWS CLI auflisten können. Um den Befehl zu verwenden, ersetzen Sie die user input placeholders durch Ihre eigenen Informationen.

aws s3api list-multipart-uploads --bucket bucket-base-name--zone-id--x-s3

Weitere Informationen finden Sie unter list-multipart-uploads im AWS Command Line Interface.

Die folgenden Beispiele zeigen, wie Sie laufende (unvollständige) mehrteilige Uploads mithilfe der AWS CLI auflisten können. Um den Befehl zu verwenden, ersetzen Sie die user input placeholders durch Ihre eigenen Informationen.

aws s3api list-multipart-uploads --bucket bucket-base-name--zone-id--x-s3

Weitere Informationen finden Sie unter list-multipart-uploads im AWS Command Line Interface.

Auflisten der Teile eines mehrteiligen Uploads

Die folgenden Beispiele zeigen, wie Sie die Teile eines mehrteiligen Uploads in einen Verzeichnis-Bucket auflisten.

SDK for Java 2.x

Die folgenden Beispiele zeigen, wie Sie die Teile eines mehrteiligen Uploads in einen Verzeichnis-Bucket mit dem SDK für Java 2.x auflisten.

public static void listMultiPartUploadsParts( S3Client s3, String bucketName, String objKey, String uploadID) { try { ListPartsRequest listPartsRequest = ListPartsRequest.builder() .bucket(bucketName) .uploadId(uploadID) .key(objKey) .build(); ListPartsResponse response = s3.listParts(listPartsRequest); ListPart parts = response.parts(); for (Part part: parts) { System.out.println("Upload in progress: Part number = \"" + part.partNumber() + "\", etag = " + part.eTag()); } } catch (S3Exception e) { System.err.println(e.getMessage()); System.exit(1); } }
SDK for Python

Die folgenden Beispiele zeigen, wie Sie die Teile eines mehrteiligen Uploads in einen Verzeichnis-Bucket mit dem SDK für Python auflisten.

import logging import boto3 from botocore.exceptions import ClientError def list_parts(s3_client, bucket_name, key_name, upload_id): ''' Lists the parts that have been uploaded for a specific multipart upload to a directory bucket. :param s3_client: boto3 S3 client :param bucket_name: Bucket that multipart uploads parts have been uploaded to :param key_name: Name of the object that has parts uploaded :param upload_id: Multipart upload ID that the parts are associated with :return: List of parts associated with the specified multipart upload, None if there are no parts ''' parts_list = [] next_part_marker = '' continuation_flag = True try: while continuation_flag: if next_part_marker == '': response = s3_client.list_parts( Bucket = bucket_name, Key = key_name, UploadId = upload_id ) else: response = s3_client.list_parts( Bucket = bucket_name, Key = key_name, UploadId = upload_id, NextPartMarker = next_part_marker ) if 'Parts' in response: for part in response['Parts']: parts_list.append(part) if response['IsTruncated']: next_part_marker = response['NextPartNumberMarker'] else: continuation_flag = False else: continuation_flag = False return parts_list except ClientError as e: logging.error(e) return None if __name__ == '__main__': region = 'us-west-2' bucket_name = 'BUCKET_NAME' key_name = 'KEY_NAME' upload_id = 'UPLOAD_ID' s3_client = boto3.client('s3', region_name = region) parts_list = list_parts(s3_client, bucket_name, key_name, upload_id) if parts_list is not None: print (f'{key_name} has {len(parts_list)} parts uploaded to {bucket_name}') else: print (f'There are no multipart uploads with that upload ID for {bucket_name} bucket')

SDK for Java 2.x

Die folgenden Beispiele zeigen, wie Sie die Teile eines mehrteiligen Uploads in einen Verzeichnis-Bucket mit dem SDK für Java 2.x auflisten.

public static void listMultiPartUploadsParts( S3Client s3, String bucketName, String objKey, String uploadID) { try { ListPartsRequest listPartsRequest = ListPartsRequest.builder() .bucket(bucketName) .uploadId(uploadID) .key(objKey) .build(); ListPartsResponse response = s3.listParts(listPartsRequest); ListPart parts = response.parts(); for (Part part: parts) { System.out.println("Upload in progress: Part number = \"" + part.partNumber() + "\", etag = " + part.eTag()); } } catch (S3Exception e) { System.err.println(e.getMessage()); System.exit(1); } }
SDK for Python

Die folgenden Beispiele zeigen, wie Sie die Teile eines mehrteiligen Uploads in einen Verzeichnis-Bucket mit dem SDK für Python auflisten.

import logging import boto3 from botocore.exceptions import ClientError def list_parts(s3_client, bucket_name, key_name, upload_id): ''' Lists the parts that have been uploaded for a specific multipart upload to a directory bucket. :param s3_client: boto3 S3 client :param bucket_name: Bucket that multipart uploads parts have been uploaded to :param key_name: Name of the object that has parts uploaded :param upload_id: Multipart upload ID that the parts are associated with :return: List of parts associated with the specified multipart upload, None if there are no parts ''' parts_list = [] next_part_marker = '' continuation_flag = True try: while continuation_flag: if next_part_marker == '': response = s3_client.list_parts( Bucket = bucket_name, Key = key_name, UploadId = upload_id ) else: response = s3_client.list_parts( Bucket = bucket_name, Key = key_name, UploadId = upload_id, NextPartMarker = next_part_marker ) if 'Parts' in response: for part in response['Parts']: parts_list.append(part) if response['IsTruncated']: next_part_marker = response['NextPartNumberMarker'] else: continuation_flag = False else: continuation_flag = False return parts_list except ClientError as e: logging.error(e) return None if __name__ == '__main__': region = 'us-west-2' bucket_name = 'BUCKET_NAME' key_name = 'KEY_NAME' upload_id = 'UPLOAD_ID' s3_client = boto3.client('s3', region_name = region) parts_list = list_parts(s3_client, bucket_name, key_name, upload_id) if parts_list is not None: print (f'{key_name} has {len(parts_list)} parts uploaded to {bucket_name}') else: print (f'There are no multipart uploads with that upload ID for {bucket_name} bucket')

Die folgenden Beispiele zeigen, wie Sie die Teile eines mehrteiligen Uploads in einen Verzeichnis-Bucket mit dem SDK für Java 2.x auflisten.

public static void listMultiPartUploadsParts( S3Client s3, String bucketName, String objKey, String uploadID) { try { ListPartsRequest listPartsRequest = ListPartsRequest.builder() .bucket(bucketName) .uploadId(uploadID) .key(objKey) .build(); ListPartsResponse response = s3.listParts(listPartsRequest); ListPart parts = response.parts(); for (Part part: parts) { System.out.println("Upload in progress: Part number = \"" + part.partNumber() + "\", etag = " + part.eTag()); } } catch (S3Exception e) { System.err.println(e.getMessage()); System.exit(1); } }

Die folgenden Beispiele zeigen, wie Sie die Teile eines mehrteiligen Uploads in einen Verzeichnis-Bucket mit der AWS CLI auflisten. Um den Befehl zu verwenden, ersetzen Sie die user input placeholders durch Ihre eigenen Informationen.

aws s3api list-parts --bucket bucket-base-name--zone-id--x-s3 --key KEY_NAME --upload-id "AS_mgt9RaQE9GEaifATue15dAAAAAAAAAAEMAAAAAAAAADQwNzI4MDU0MjUyMBYAAAAAAAAAAA0AAAAAAAAAAAH2AfYAAAAAAAAEBSD0WBKMAQAAAABneY9yBVsK89iFkvWdQhRCcXohE8RbYtc9QvBOG8tNpA"

Weitere Informationen finden Sie unter list-buckets in der AWS Command Line Interface.

Die folgenden Beispiele zeigen, wie Sie die Teile eines mehrteiligen Uploads in einen Verzeichnis-Bucket mit der AWS CLI auflisten. Um den Befehl zu verwenden, ersetzen Sie die user input placeholders durch Ihre eigenen Informationen.

aws s3api list-parts --bucket bucket-base-name--zone-id--x-s3 --key KEY_NAME --upload-id "AS_mgt9RaQE9GEaifATue15dAAAAAAAAAAEMAAAAAAAAADQwNzI4MDU0MjUyMBYAAAAAAAAAAA0AAAAAAAAAAAH2AfYAAAAAAAAEBSD0WBKMAQAAAABneY9yBVsK89iFkvWdQhRCcXohE8RbYtc9QvBOG8tNpA"

Weitere Informationen finden Sie unter list-buckets in der AWS Command Line Interface.

DatenschutzNutzungsbedingungen für die WebsiteCookie-Einstellungen
© 2025, Amazon Web Services, Inc. oder Tochtergesellschaften. Alle Rechte vorbehalten.