

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.

# 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);
            }
        }
    }
}
```

------