

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 `S3CrtClient`進行 Amazon S3 操作
<a name="examples-s3-crt"></a>

`S3CrtClient` 類別可在 的 1.9 版中使用， 適用於 C\$1\$1 的 AWS SDK 並改善在 Amazon S3 之間上傳和下載大型資料檔案的輸送量。如需此版本改進的詳細資訊，請參閱[使用 v1 適用於 C\$1\$1 的 AWS SDK .9 改善 Amazon S3 輸送量 ](https://github.com/aws/aws-sdk-cpp/wiki/Improving-S3-Throughput-with-AWS-SDK-for-CPP-v1.9)

在[AWS 通用執行期 (CRT) 程式庫](https://docs.aws.amazon.com/sdkref/latest/guide/common-runtime.html)的頂端`S3CrtClient`實作 。

**注意**  
為了避免收取不完整或部分上傳的費用，建議您在 Amazon S3 儲存貯體上啟用 [AbortIncompleteMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpu-abort-incomplete-mpu-lifecycle-config.html) 生命週期規則。  
此規則會指示 Amazon S3 在啟動後的指定天數內中止未完成的分段上傳。超過設定的時間限制時，Amazon S3 會中止上傳，然後刪除不完整的上傳資料。  
如需詳細資訊，請參閱《Amazon S3 使用者指南》中的在[儲存貯體上設定生命週期組態](https://docs.aws.amazon.com/AmazonS3/latest/userguide/how-to-set-lifecycle-configuration-intro.html)。

## 先決條件
<a name="codeExamplePrereq"></a>

開始之前，建議您先閱讀[開始使用 適用於 C\$1\$1 的 AWS SDK](getting-started.md)。

下載範例程式碼並建置解決方案，如中所述[程式碼範例入門](getting-started-code-examples.md)。

若要執行範例，您的程式碼用來提出請求的使用者描述檔必須具有 AWS （針對 服務和 動作） 的適當許可。如需詳細資訊，請參閱[提供 AWS 登入](credentials.md)資料。

## 使用 上傳和下載物件 `S3CrtClient`
<a name="stream"></a>

此範例示範如何使用 [https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-s3-crt/html/class_aws_1_1_s3_crt_1_1_s3_crt_client.html](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-s3-crt/html/class_aws_1_1_s3_crt_1_1_s3_crt_client.html)。此範例會建立儲存貯體、上傳物件、下載物件，然後刪除檔案和儲存貯體。PUT 操作會變成分段上傳。GET 操作會變成多個「範圍」的 GET 請求。如需分段上傳的詳細資訊，請參閱《Amazon S3 使用者指南》中的[使用分段上傳上傳和複製物件](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html)。

在此範例中，提供的資料檔案 `ny.json`會以分段上傳的形式上傳。這可以透過在成功執行程式後檢視偵錯日誌來確認。

如果上傳失敗，`AbortMultipartUpload`則會在基礎 CRT 程式庫中發出 ，以清除任何已上傳的組件。不過，並非所有故障都可以在內部處理 （例如網路纜線已拔除）。建議您在 Amazon S3 儲存貯體上建立生命週期規則，以確保部分上傳的資料不會停留在您的帳戶 （部分上傳的資料仍應計費）。若要了解如何設定生命週期規則，請參閱[探索和刪除不完整的分段上傳以降低 Amazon S3 成本](https://aws.amazon.com/blogs/aws-cost-management/discovering-and-deleting-incomplete-multipart-uploads-to-lower-amazon-s3-costs/ )。

**使用偵錯日誌來探索分段上傳詳細資訊**

1. 在 中`main()`，請注意有「TODO」註解，其中包含更新程式碼的指示。

   1. 對於 `file_name`：從程式碼註解中提供的連結下載範例資料檔案 `ny.json`，或使用您自己的大型資料檔案。

   1. 對於 `region`：使用列舉將`region`變數更新為 AWS 區域 帳戶的 。若要尋找您帳戶的 區域，請登入 AWS 管理主控台，並在右上角找到 區域。

1. 建置範例。

1. 將變數指定的檔案複製到`file_name`可執行檔資料夾，然後執行`s3-crt-demo`可執行檔。

1. 在您的可執行檔資料夾中，尋找最新的 `.log` 檔案。

1. 開啟日誌檔案，選取**搜尋**，然後輸入 **partNumber**。

1. 日誌包含類似下列的項目，其中`uploadId`會針對上傳檔案的每個部分指定 `partNumber`和 ：

    `PUT /my-object partNumber=1&uploadId=gsk8vDbmnlA5EseDo._LDEgq22Qmt0SeuszYxMsZ9ABt503VqDIFOP8xzZI1P0zp.ToS.qo5kK16HNWogZF3KpRo.Dc7QnLZIK0BTmzCWwWoPax4T21hvP6nPdz9591F content-length:8388608 host:my-bucketasdfasdf.s3.us-east-2.amazonaws.com x-amz-content-sha256:UNSIGNED-PAYLOAD`

    及 

    `PUT /my-object partNumber=2&uploadId=gsk8vDbmnlA5EseDo._LDEgq22Qmt0SeuszYxMsZ9ABt503VqDIFOP8xzZI1P0zp.ToS.qo5kK16HNWogZF3KpRo.Dc7QnLZIK0BTmzCWwWoPax4T21hvP6nPdz9591F content-length:8388608 host:my-bucketasdfasdf.s3.us-east-2.amazonaws.com x-amz-content-sha256:UNSIGNED-PAYLOAD `

請參閱 GitHub 上的[完整範例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/s3-crt/s3-crt-demo.cpp)。