

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Menyalin objek menggunakan unggahan multibagian
<a name="CopyingObjectsMPUapi"></a>

Unggahan multipart memungkinkan Anda menyalin objek sebagai satu set bagian. Contoh dalam bagian ini menunjukkan cara menyalin objek yang lebih besar dari 5 GB menggunakan API unggahan multibagian. Untuk informasi tentang unggahan multibagian, lihat. [Mengunggah dan menyalin objek menggunakan unggahan multipart di Amazon S3](mpuoverview.md)

Anda dapat menyalin objek kurang dari 5 GB dalam satu operasi tanpa menggunakan API unggahan multibagian. Anda dapat menyalin objek kurang dari 5 GB menggunakan Konsol Manajemen AWS, AWS CLI, REST API, atau AWS SDKs. Untuk informasi selengkapnya, lihat [Menyalin, memindahkan, dan mengganti nama objek](copy-object.md). 

Untuk end-to-end prosedur mengunggah objek dengan unggahan multipart dengan checksum tambahan, lihat. [Tutorial: Unggah objek melalui unggahan multipart dan verifikasi integritas datanya](tutorial-s3-mpu-additional-checksums.md)

Bagian berikut menunjukkan cara menyalin objek dengan unggahan multipart dengan REST API atau AWS SDKs.

## Penggunaan API REST
<a name="CopyingObjctsUsingRESTMPUapi"></a>

Bagian berikut dalam *Referensi API Amazon Simple Storage Service* menjelaskan tentang API REST untuk unggahan multibagian. Untuk menyalin objek yang sudah ada, Anda dapat menggunakan API Unggah Bagian (Salinan), dan menentukan objek sumber dengan menambahkan header permintaan `x-amz-copy-source` dalam permintaan Anda. 
+ [Mulai Unggahan Multibagian](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadInitiate.html)
+ [Unggah Bagian](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadUploadPart.html)
+ [Unggah Bagian (Salinan)](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadUploadPartCopy.html)
+ [Selesaikan Unggahan Multibagian](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadComplete.html)
+ [Batalkan Unggahan Multibagian](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadAbort.html)
+ [Daftarkan Bagian](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadListParts.html)
+ [Daftarkan Unggahan Multibagian](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadListMPUpload.html)

Anda dapat menggunakan ini APIs untuk membuat permintaan REST Anda sendiri, atau Anda dapat menggunakan salah satu dari yang SDKs kami sediakan. Untuk informasi selengkapnya tentang menggunakan Unggahan Multipart dengan AWS CLI, lihat[Menggunakan AWS CLI](mpu-upload-object.md#UsingCLImpUpload). Untuk informasi lebih lanjut tentang SDKs, lihat[AWS Dukungan SDK untuk unggahan multipart](mpuoverview.md#sdksupportformpu).

## Menggunakan AWS SDKs
<a name="copy-object-mpu-sdks"></a>

Untuk menyalin sebuah objek menggunakan API tingkat rendah, lakukan hal berikut ini:
+ Mulai unggahan multibagian dengan memanggil metode `AmazonS3Client.initiateMultipartUpload()`.
+ Simpan ID unggahan dari objek respons yang dikembalikan oleh metode `AmazonS3Client.initiateMultipartUpload()`. Anda memberikan ID unggahan ini untuk setiap operasi unggahan bagian.
+ Salin semua bagiannya. Untuk setiap bagian yang harus Anda salin, buat sebuah instans baru dari kelas `CopyPartRequest`. Berikan informasi bagian, termasuk nama bucket sumber dan tujuan, kunci objek sumber dan tujuan, ID unggahan, lokasi byte pertama dan terakhir bagian tersebut, dan nomor bagian. 
+ Simpan respons dari panggilan metode `AmazonS3Client.copyPart()`. Setiap respons mencakup nilai `ETag` dan nomor bagian untuk bagian yang diunggah. Anda memerlukan informasi ini untuk menyelesaikan unggahan multibagian. 
+ Perintahkan metode `AmazonS3Client.completeMultipartUpload()` untuk menyelesaikan operasi penyalinan. 

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

Untuk contoh cara menyalin objek menggunakan unggahan multipart dengan AWS SDK for Java, [lihat Menyalin bagian objek dari objek lain](https://docs.aws.amazon.com/AmazonS3/latest/API/s3_example_s3_UploadPartCopy_section.html) di Referensi API *Amazon S3*.

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

Contoh C \$1 berikut menunjukkan cara menggunakan SDK untuk .NET untuk menyalin objek Amazon S3 yang lebih besar dari 5 GB dari satu lokasi sumber ke lokasi lain, seperti dari satu bucket ke bucket lainnya. Untuk menyalin objek yang lebih kecil dari 5 GB, gunakan prosedur penyalinan operasi tunggal yang dijelaskan dalam [Menggunakan AWS SDKs](copy-object.md#CopyingObjectsUsingSDKs). Untuk informasi selengkapnya tentang unggahan multibagian Amazon S3, lihat [Mengunggah dan menyalin objek menggunakan unggahan multipart di Amazon S3](mpuoverview.md).

Contoh ini menunjukkan cara menyalin objek Amazon S3 yang lebih besar dari 5 GB dari satu bucket S3 ke bucket lainnya menggunakan API unggahan SDK untuk .NET multipart.

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

------