

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

# Menggunakan TransferManager untuk operasi Amazon S3
<a name="examples-s3-transfermanager"></a>

Anda dapat menggunakan AWS SDK untuk C\$1\$1 `TransferManager` kelas untuk mentransfer file dengan andal dari lingkungan lokal ke Amazon S3 dan menyalin objek dari satu lokasi Amazon S3 ke lokasi lain. `TransferManager`bisa mendapatkan kemajuan transfer dan jeda atau melanjutkan unggahan dan unduhan.

**catatan**  
Agar tidak dikenakan biaya untuk unggahan yang tidak lengkap atau sebagian, sebaiknya aktifkan aturan [AbortIncompleteMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpu-abort-incomplete-mpu-lifecycle-config.html)siklus hidup di bucket Amazon S3.  
Aturan ini mengarahkan Amazon S3 untuk membatalkan unggahan multibagian yang tidak selesai dalam jumlah hari tertentu setelah dimulai. Ketika batas waktu yang ditetapkan terlampaui, Amazon S3 membatalkan unggahan dan kemudian menghapus data unggahan yang tidak lengkap.   
Untuk informasi selengkapnya, lihat [Menyetel konfigurasi siklus hidup pada bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/how-to-set-lifecycle-configuration-intro.html) di Panduan Pengguna Amazon S3.

## Prasyarat
<a name="codeExamplePrereq"></a>

Sebelum Anda mulai, kami sarankan Anda membaca [Memulai menggunakan AWS SDK untuk C\$1\$1](getting-started.md). 

Unduh kode contoh dan buat solusinya seperti yang dijelaskan dalam[Memulai contoh kode](getting-started-code-examples.md). 

Untuk menjalankan contoh, profil pengguna yang digunakan kode Anda untuk membuat permintaan harus memiliki izin yang tepat AWS (untuk layanan dan tindakan). Untuk informasi selengkapnya, lihat [Menyediakan AWS kredensil](credentials.md).

## Unggah dan unduh objek menggunakan `TransferManager`
<a name="stream"></a>

Contoh ini menunjukkan bagaimana [https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-transfer/html/class_aws_1_1_transfer_1_1_transfer_manager.html](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-transfer/html/class_aws_1_1_transfer_1_1_transfer_manager.html)mentransfer objek besar dalam memori. `UploadFile`dan `DownloadFile` metode keduanya disebut secara asinkron dan mengembalikan a `TransferHandle` untuk mengelola status permintaan Anda. Jika objek yang diunggah lebih besar dari `bufferSize` maka unggahan multipart akan dilakukan. `bufferSize`Default ke 5MB, tetapi ini dapat dikonfigurasi melalui. [https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-transfer/html/struct_aws_1_1_transfer_1_1_transfer_manager_configuration.html](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-transfer/html/struct_aws_1_1_transfer_1_1_transfer_manager_configuration.html) 

```
        auto s3_client = Aws::MakeShared<Aws::S3::S3Client>("S3Client");
        auto executor = Aws::MakeShared<Aws::Utils::Threading::PooledThreadExecutor>("executor", 25);
        Aws::Transfer::TransferManagerConfiguration transfer_config(executor.get());
        transfer_config.s3Client = s3_client;

        // Create buffer to hold data received by the data stream.
        Aws::Utils::Array<unsigned char> buffer(BUFFER_SIZE);

        // The local variable 'streamBuffer' is captured by reference in a lambda.
        // It must persist until all downloading by the 'transfer_manager' is complete.
        Stream::PreallocatedStreamBuf streamBuffer(buffer.GetUnderlyingData(), buffer.GetLength());

        auto transfer_manager = Aws::Transfer::TransferManager::Create(transfer_config);

        auto uploadHandle = transfer_manager->UploadFile(LOCAL_FILE, BUCKET, KEY, "text/plain", Aws::Map<Aws::String, Aws::String>());
        uploadHandle->WaitUntilFinished();
        bool success = uploadHandle->GetStatus() == Transfer::TransferStatus::COMPLETED; 
      
        if (!success)
        {
            auto err = uploadHandle->GetLastError();           
            std::cout << "File upload failed:  "<< err.GetMessage() << std::endl;
        }
        else
        {
            std::cout << "File upload finished." << std::endl;

            auto downloadHandle = transfer_manager->DownloadFile(BUCKET,
                KEY,
                [&]() { //Define a lambda expression for the callback method parameter to stream back the data.
                    return Aws::New<MyUnderlyingStream>("TestTag", &streamBuffer);
                });
            downloadHandle->WaitUntilFinished();// Block calling thread until download is complete.
            auto downStat = downloadHandle->GetStatus();
            if (downStat != Transfer::TransferStatus::COMPLETED)
            {
                auto err = downloadHandle->GetLastError();
                std::cout << "File download failed:  " << err.GetMessage() << std::endl;
            }
            std::cout << "File download to memory finished."  << std::endl;
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/transfer-manager/transferOnStream.cpp) di Github.