

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

# 從目錄儲存貯體複製物件或將物件複製到目錄儲存貯體
<a name="directory-buckets-objects-copy"></a>

該複製操作會為已存放在 Amazon S3 中的物件建立複本。您可以在目錄儲存貯體和一般用途儲存貯體之間複製物件。您也可以在儲存貯體內以及相同類型的儲存貯體之間複製物件，例如從目錄儲存貯體複製到目錄儲存貯體。

**注意**  
當來源或目的地儲存貯體位於 AWS 本機區域時， AWS 區域 不支援跨不同 複製物件。來源儲存貯體和目的地儲存貯體必須具有相同的父 AWS 區域。來源儲存貯體和目的地儲存貯體可以是不同的儲存貯體位置類型 (可用區域或本機區域)。

單一非敗即成 (atomic operation) 操作最多可以為 5 GB 的物件建立複本。但若複製的物件大於 5 GB，則必須使用分段上傳 API 操作。如需詳細資訊，請參閱[搭配目錄儲存貯體使用分段上傳](s3-express-using-multipart-upload.md)。

**許可**  
 若要複製物件，您必須具有下列許可：
+ 若要在目錄儲存貯體之間複製物件，您必須具有 `s3express:CreateSession` 許可。
+ 若要將物件從目錄儲存貯體複製到一般用途儲存貯體，您必須具有 `s3express:CreateSession` 許可和 `s3:PutObject` 許可，以將複製的物件寫入目的地儲存貯體。
+ 若要將物件從一般用途儲存貯體複製到目錄儲存貯體，您必須具有 `s3express:CreateSession` 許可和 `s3:GetObject` 許可，以讀取要複製的來源物件。

   如需詳細資訊，請參閱 Amazon Simple Storage Service API 參考**中的 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)。

**加密**  
Amazon S3 會自動加密上傳到 S3 儲存貯體的所有新物件。S3 儲存貯體的預設加密組態一律為啟用狀態，且最低限度設定為使用 Amazon S3 受管金鑰 (SSE-S3) 的伺服器端加密。

對於目錄儲存貯體，支援使用 AWS Key Management Service (AWS KMS) 金鑰 (SSE-KMS) 的 SSE-S3 和伺服器端加密。當目的地儲存貯體是目錄儲存貯體時，建議目的地儲存貯體的預設加密使用所需的加密組態，而且您不會覆寫儲存貯體的預設加密。然後，新的物件會以所需的加密設定自動加密。此外，當您透過 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)，將 SSE-KMS 加密物件從一般用途儲存貯體複製到目錄儲存貯體、從目錄儲存貯體複製到一般用途儲存貯體或在目錄儲存貯體之間複製時，不支援 S3 儲存貯體金鑰。在此情況下，Amazon S3 AWS KMS 每次對 KMS 加密物件提出複製請求時都會呼叫 。如需在目錄儲存貯體中覆寫加密行為的詳細資訊，請參閱[使用 指定伺服器端加密 AWS KMS 以進行新物件上傳](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html)。

對於一般用途儲存貯體，您可以使用 SSE-S3 （預設值）、伺服器端加密搭配 AWS Key Management Service (AWS KMS) 金鑰 (SSE-KMS)、雙層伺服器端加密搭配 AWS KMS 金鑰 (DSSE-KMS)，或伺服器端加密搭配客戶提供的金鑰 (SSE-C)。

如果您提出複製請求，指定對目錄儲存貯體 (來源或目的地儲存貯體) 使用 DSSE-KMS 或 SSE-C，回應會傳回錯誤。

**Tags (標籤)**  
目錄儲存貯體不支援標籤。如果您將具有標籤的物件從一般用途儲存貯體複製到目錄儲存貯體，您會收到 HTTP `501 (Not Implemented)` 回應。如需詳細資訊，請參閱 Amazon Simple Storage Service API 參考**中的 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)。

**ETag**  
S3 Express One Zone 的實體標籤 (ETag) 是隨機的英數字串，而不是 MD5 檢查總和。為了協助確保物件完整性，請使用額外的檢查總和。

**其他檢查總和**  
S3 Express One Zone 可讓您選擇用於在上傳或下載過程中驗證資料的檢查總和演算法選項。您可以選擇以下 Secure Hash 演算法 (SHA) 或循環宂餘檢查 (CRC) 資料完整性演算法之一：CRC32、CRC32C、SHA-1 和 SHA-256。S3 Express One Zone 儲存類別不支援 MD5 型檢查總和。

如需詳細資訊，請參閱[S3 其他檢查總和最佳實務](s3-express-optimizing-performance.md#s3-express-optimizing-performance-checksums)。

**支援的功能**  
如需 S3 Express One Zone 支援哪些 Amazon S3 功能的詳細資訊，請參閱[目錄儲存貯體的不同之處](s3-express-differences.md)。

## 使用 S3 主控台 (複製到目錄儲存貯體)
<a name="directory-bucket-copy-console"></a>

**注意**  
當您使用主控台將物件複製到目錄儲存貯體時，您有下列限制：  
`Copy` 動作會套用至指定資料夾中 (指定字首) 的所有物件。在動作進行期間加入這些資料夾的物件可能會受到影響。
使用客戶提供的加密金鑰 (SSE-C) 加密的物件無法經由 S3 主控台複製。若要複製使用 SSE-C 加密的物件，請使用 AWS CLI、 AWS SDK 或 Amazon S3 REST API。
複製的物件不會保留原始物件的物件鎖定設定。
如果複製物件的來源儲存貯體使用儲存貯體擁有者強制執行的 S3 物件擁有權設定，則不會將物件 ACL 複製到指定的目的地。
如果您想要將物件複製到使用儲存貯體擁有者強制執行的 S3 物件擁有權設定的儲存貯體，請確定來源儲存貯體也使用儲存貯體擁有者強制執行的設定，或移除任何物件 ACL 授予其他 AWS 帳戶和群組。
從一般用途儲存貯體複製到目錄儲存貯體的物件不會保留物件標籤、ACL 或 Etag 值。檢查總和值可以複製，但不等同於 Etag。檢查總和值與新增時相比可能有所變更。
 複製到目錄儲存貯體的所有物件都會具有儲存貯體擁有者強制執行的 S3 物件擁有權設定。

**將物件從一般用途儲存貯體複製到目錄儲存貯體或從一個目錄儲存貯體複製到另一個目錄儲存貯體**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 的 Amazon S3 主控台。

1. 在左側導覽窗格中，您要從中複製物件的儲存貯體類型：
   + 若要從一般用途儲存貯體進行複製，請選擇**一般用途儲存貯體**索引標籤。
   + 若要從目錄儲存貯體進行複製，請選擇**目錄儲存貯體**索引標籤。

1. 選擇包含您要複製之物件的一般用途儲存貯體或目錄儲存貯體。

1. 選擇 **Objects** (物件) 索引標籤。在**物件**頁面上，選取您要複製之物件名稱左側的核取方塊。

1. 在 **Actions (動作)** 功能表上，選擇 **Copy (複製)**。

   **複製**頁面隨即出現。

1. 在**目的地**下，選擇**目錄儲存貯體**作為目的地類型。若要指定目的地路徑，請選擇**瀏覽 S3**，導覽至目的地，然後選擇目的地左側的選項按鈕。選擇右下角的 **Choose destination** (選擇目的地)。

   或者，輸入目的地路徑。

1. 在**其他複製設定**下，選擇**複製來源設定**、**不要指定設定**或**指定設定**。**複製來源設定**是預設選項。如果您只想複製物件但不想包含來源設定屬性，請選擇**不要指定設定**。選擇**指定設定**以指定伺服器端加密、檢查總和及中繼資料的設定。

1. 選擇右下角的 **Copy** (複製)。Amazon S3 會將您的物件複製到目的地。

## 使用 S3 主控台 (複製到一般用途儲存貯體)
<a name="directory-bucket-copy-console"></a>

**注意**  
當您使用主控台將物件複製到一般用途儲存貯體時，您有下列限制：  
`Copy` 動作會套用至指定資料夾中 (指定字首) 的所有物件。在動作進行期間加入這些資料夾的物件可能會受到影響。
使用客戶提供的加密金鑰 (SSE-C) 加密的物件無法經由 S3 主控台複製。若要複製使用 SSE-C 加密的物件，請使用 AWS CLI、 AWS SDK 或 Amazon S3 REST API。
複製的物件不會保留原始物件的物件鎖定設定。
如果複製物件的來源儲存貯體使用儲存貯體擁有者強制執行的 S3 物件擁有權設定，則不會將物件 ACL 複製到指定的目的地。
如果您想要將物件複製到使用儲存貯體擁有者強制執行的 S3 物件擁有權設定的儲存貯體，請確定來源儲存貯體也使用儲存貯體擁有者強制執行的設定，或移除任何物件 ACL 授予其他 AWS 帳戶和群組。

**將物件從目錄儲存貯體複製到一般用途儲存貯體**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 的 Amazon S3 主控台。

1. 在左側導覽窗格中，選擇 **Buckets** (儲存貯體)。

1. 選擇**目錄儲存貯體**索引標籤。

1. 選擇包含您要複製之物件的目錄儲存貯體。

1. 選擇 **Objects** (物件) 索引標籤。在**物件**頁面上，選取您要複製之物件名稱左側的核取方塊。

1. 在 **Actions (動作)** 功能表上，選擇 **Copy (複製)**。

    

1. 在**目的地**下，選擇**一般用途儲存貯體**作為目的地類型。若要指定目的地路徑，請選擇**瀏覽 S3**，導覽至目的地，然後選擇目的地左側的選項按鈕。選擇右下角的 **Choose destination** (選擇目的地)。

   或者，輸入目的地路徑。

1. 在**其他複製設定**下，選擇**複製來源設定**、**不要指定設定**或**指定設定**。**複製來源設定**是預設選項。如果您只想複製物件但不想包含來源設定屬性，請選擇**不要指定設定**。選擇**指定設定**以指定儲存類別、ACL、物件標籤、中繼資料、伺服器端加密和額外檢查總和的設定。

1. 選擇右下角的 **Copy** (複製)。Amazon S3 會將您的物件複製到目的地。

## 使用 AWS SDKs
<a name="directory-bucket-copy-sdks"></a>

------
#### [ SDK for Java 2.x ]

**Example**  

```
 public static void copyBucketObject (S3Client s3, String sourceBucket, String objectKey, String targetBucket) {
      CopyObjectRequest copyReq = CopyObjectRequest.builder()
          .sourceBucket(sourceBucket)
          .sourceKey(objectKey)
          .destinationBucket(targetBucket)
          .destinationKey(objectKey)
          .build();
       String temp = "";
                                             
       try {
           CopyObjectResponse copyRes = s3.copyObject(copyReq);
           System.out.println("Successfully copied " + objectKey +" from bucket " + sourceBucket +" into bucket "+targetBucket);
       }
       
       catch (S3Exception e) {
           System.err.println(e.awsErrorDetails().errorMessage());
           System.exit(1);
       }
 }
```

------

## 使用 AWS CLI
<a name="directory-copy-object-cli"></a>

下列`copy-object`範例命令顯示如何使用 AWS CLI 將物件從一個儲存貯體複製到另一個儲存貯體。您可以在儲存貯體類型之間複製物件。若要執行此命令，請以您自己的資訊取代使用者輸入預留位置。

```
aws s3api copy-object --copy-source SOURCE_BUCKET/SOURCE_KEY_NAME --key TARGET_KEY_NAME --bucket TARGET_BUCKET_NAME
```

如需詳細資訊，請參閱《AWS CLI 命令參考》**中的 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/copy-object.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/copy-object.html)。