重新命名目錄儲存貯體中的物件 - Amazon Simple Storage Service

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

重新命名目錄儲存貯體中的物件

使用 RenameObject操作,您可以在使用 S3 Express One Zone 儲存類別的目錄儲存貯體中以原子方式重新命名現有物件,而不需要任何資料移動。您可以透過將現有物件的名稱指定為來源,並將物件的新名稱指定為相同目錄儲存貯體中的目的地,來重新命名物件。在以斜線 (/) 分隔符號字元結尾的物件上,RenameObjectAPI 操作不會成功。如需詳細資訊,請參閱命名 Amazon S3 物件

無論物件的大小為何,RenameObject操作通常以毫秒為單位完成。此功能可加速日誌檔案管理、媒體處理和資料分析等應用程式。此外, 會RenameObject保留所有物件中繼資料屬性,包括儲存類別、加密類型、建立日期、上次修改日期和檢查總和屬性。

注意

RenameObject 僅支援存放在 S3 Express One Zone 儲存類別中的物件。

若要授予 RenameObject操作的存取權,建議您使用 CreateSession操作進行工作階段型授權。具體而言,您會將 s3express:CreateSession 許可授予儲存貯體政策或身分型政策中的目錄儲存貯體。然後,您可以在目錄儲存貯體上進行 CreateSession API 呼叫,以取得工作階段字符。在您的請求標頭中使用工作階段字符,您可以對此操作提出 API 請求。工作階段字符過期後,您會進行另一個 CreateSession API 呼叫來產生新的工作階段字符以供使用。CLI 和 AWS SDKs AWS 將建立和管理工作階段,包括自動重新整理工作階段權杖,以避免工作階段過期時服務中斷。如需授權的詳細資訊,請參閱《Amazon S3 API 參考CreateSession》中的 。若要進一步了解區域端點 API 操作,請參閱使用 授權區域端點 API 操作CreateSession

如果您不想覆寫現有的物件,您可以在RenameObject請求‘*’中新增具有 值If-None-Match的條件式標頭。如果物件名稱已存在,Amazon S3 會傳回412 Precondition Failed錯誤。如需詳細資訊,請參閱 Amazon S3 API 參考中的 RenameObject

RenameObject 是一種區域端點 API 操作 (物件層級或資料平面操作),會記錄到 AWS CloudTrail。您可以使用 CloudTrail 來收集在目錄儲存貯體中物件上執行之RenameObject操作的相關資訊。如需詳細資訊,請參閱針對目錄儲存貯體使用 記錄,以及 AWS CloudTrail針對目錄儲存貯體的 CloudTrail 日誌檔案範例

S3 Express One Zone 是唯一支援 的儲存類別RenameObject,其定價與 S3 Express One Zone 中的 PUTPOSTCOPYLIST 請求 (每 1,000 個請求) 相同。如需詳細資訊,請參閱 Simple Storage Service (Amazon S3) 定價

重新命名物件

若要重新命名目錄儲存貯體中的物件,您可以使用 Amazon S3 主控台、 AWS CLI、 AWS SDKs、REST API 或 Amazon S3 掛載點 (1.19.0 版或更新版本)。

重新命名目錄儲存貯體中的物件
  1. 登入 AWS Management Console 並開啟位於 https://https://console.aws.amazon.com/s3/ 的 Amazon S3 主控台。

  2. 在導覽窗格中,選擇儲存貯體,然後選擇目錄儲存貯體索引標籤。導覽至包含您要重新命名之物件的 Amazon S3 目錄儲存貯體。

  3. 選取您要重新命名之物件的核取方塊。

  4. 動作功能表上,選擇重新命名物件

  5. 新物件名稱方塊中,輸入物件的新名稱。

    注意

    如果您指定與現有物件相同的物件名稱,操作將會失敗,Amazon S3 會傳回412 Precondition Failed錯誤。物件金鑰名稱長度不能超過 1,024 個位元組。物件名稱中包含的字首會計入總長度。

  6. 選擇重新命名物件。Amazon S3 會重新命名您的物件。

這些rename-object範例示範如何使用 AWS CLI 重新命名物件。若要執行這些命令,請以您自己的資訊取代使用者輸入預留位置

下列範例示範如何使用來源物件 ETag 的條件式檢查來重新命名物件。

aws s3api rename-object \ --bucket amzn-s3-demo-bucket--usw2-az1--x-s3 \ --key new-file.txt \ --rename-source amzn-s3-demo-bucket--usw2-az1--x-s3/original-file.txt \ --source-if-match "\"a1b7c3d2e5f6\""

此命令會執行下列動作:

  • 將物件從 original-file.txt 重新命名為amzn-s3-demo-bucket--usw2-az1--x-s3目錄儲存貯體中的 new-file.txt

  • 只有在來源物件的 ETag 符合 "a1b7c3d4e5f6" 時,才會執行重新命名。

如果 ETag 不相符,操作將會失敗並顯示412 Precondition Failed錯誤。

下列範例示範如何使用新指定物件名稱的條件式檢查來重新命名物件。

aws s3api rename-object \ --bucket amzn-s3-demo-bucket--usw2-az1--x-s3 \ --key new-file.txt \ --rename-source amzn-s3-demo-bucket--usw2-az1--x-s3/original-file.txt \ --destination-if-none-match "\"e5f3g7h8i9j0\""

此命令會執行下列動作:

  • 將物件從 original-file.txt 重新命名為amzn-s3-demo-bucket--usw2-az1--x-s3目錄儲存貯體中的 new-file.txt

  • 只有在物件存在且物件的 ETag 不符合「e5f3g7h8i9j0」時,才會執行重新命名操作。

如果具有新指定名稱和相符 ETag 的物件已存在,則操作會失敗並顯示412 Precondition Failed錯誤。

SDK for Java

您可以使用 適用於 Java 的 AWS SDK 來重新命名物件。若要使用這些範例,請以您自己的資訊取代使用者輸入預留位置

下列範例示範如何使用適用於 Java RenameObjectRequest的 AWS 開發套件建立

String key = "key"; String newKey = "new-key"; String expectedETag = "e5f3g7h8i9j0"; RenameObjectRequest renameRequest = RenameObjectRequest.builder() .bucket(amzn-s3-demo-bucket--usw2-az1--x-s3) .key(newKey) .renameSource(key) .destinationIfMatch(e5f3g7h8i9j0) .build();

該程式碼會執行下列作業:

  • amzn-s3-demo-bucket--usw2-az1--x-s3目錄儲存貯體中建立將物件從「金鑰」重新命名為「新金鑰」的請求。

  • 包括只有在物件的 ETag 符合「e5f3g7h8i9j0」時,才會發生重新命名的條件。

  • 如果 ETag 不相符或物件不存在,操作將會失敗。

下列範例示範如何使用適用於 Java 的 AWS SDK 建立RenameObjectRequest具有無相符條件的 。

String key = "key"; String newKey = "new-key"; String noneMatchETag = "e5f3g7h8i9j0"; RenameObjectRequest renameRequest = RenameObjectRequest.builder() .bucket(amzn-s3-demo-bucket--usw2-az1--x-s3) .key(newKey) .renameSource(key) .destinationIfNoneMatch(noneMatchETag) .build();

該程式碼會執行下列作業:

  • 建立請求,將物件從「金鑰」重新命名為amzn-s3-demo-bucket--usw2-az1--x-s3目錄儲存貯體中的「新金鑰」。

  • 包含使用 的條件.destinationIfNoneMatch(noneMatchETag),以確保只有在目的地物件的 ETag 不符合「e5f3g7h8i9j0」時,才會發生重新命名。

如果具有新指定名稱的物件存在且具有指定的 ETag,則操作會失敗並顯示412 Precondition Failed錯誤。

SDK for Python

您可以使用適用於 Python 的 SDK 來重新命名物件。若要使用這些範例,請以您自己的資訊取代使用者輸入預留位置

下列範例示範如何使用適用於 Python 的 AWS SDK (Boto3) 重新命名物件。

def basic_rename(bucket, source_key, destination_key): try: s3.rename_object( Bucket=amzn-s3-demo-bucket--usw2-az1--x-s3, Key=destination_key, RenameSource=f"{amzn-s3-demo-bucket--usw2-az1--x-s3}/{source_key}" ) print(f"Successfully renamed {source_key} to {destination_key}") except ClientError as e: print(f"Error renaming object: {e}")

該程式碼會執行下列作業:

  • 將物件從 source_key 重新命名為amzn-s3-demo-bucket--usw2-az1--x-s3目錄儲存貯體中的 destination_key

  • 如果物件的重新命名成功,則列印成功訊息;如果失敗,則列印錯誤訊息。

下列範例示範如何使用適用於 Python 的 AWS SDK (Boto3) 重新命名具有 SourceIfMatchDestinationIfNoneMatch條件的物件。

def rename_with_conditions(bucket, source_key, destination_key, source_etag, dest_etag): try: s3.rename_object( Bucket=amzn-s3-demo-bucket--usw2-az1--x-s3, Key=destination_key, RenameSource=f"{amzn-s3-demo-bucket--usw2-az1--x-s3}/{source_key}", SourceIfMatch=source_ETag, DestinationIfNoneMatch=dest_ETag ) print(f"Successfully renamed {source_key} to {destination_key} with conditions") except ClientError as e: print(f"Error renaming object: {e}")

該程式碼會執行下列作業:

  • 執行條件式重新命名操作,並套用兩個條件: SourceIfMatchDestinationIfNoneMatch。這些條件的組合可確保物件尚未修改,且物件不存在並具有新的指定名稱。

  • 將物件從 source_key 重新命名為amzn-s3-demo-bucket--usw2-az1--x-s3目錄儲存貯體中的 destination_key

  • 如果物件的重新命名成功,則列印成功訊息;如果失敗或不符合條件,則列印錯誤訊息。

SDK for Rust

您可以使用 SDK for Rust 來重新命名物件。若要使用這些範例,請以您自己的資訊取代使用者輸入預留位置

下列範例示範如何使用 SDK for Rust 重新命名amzn-s3-demo-bucket--usw2-az1--x-s3目錄儲存貯體中的物件。

async fn basic_rename_example(client: &Client) -> Result<(), Box<dyn Error>> { let response = client .rename_object() .bucket(" amzn-s3-demo-bucket--usw2-az1--x-s3") .key("new-name.txt") // New name/path for the object .rename_source("old-name.txt") // Original object name/path .send() .await?; Ok(()) }

該程式碼會執行下列作業:

  • 建立請求,以在amzn-s3-demo-bucket--usw2-az1--x-s3目錄儲存貯體中將物件從 "old-name.tx" 重新命名為 "new-name.txt"。

  • 傳回處理潛在錯誤的Result類型。

您可以傳送 REST 請求來重新命名物件。如需詳細資訊,請參閱 Amazon S3 API 參考中的 RenameObject

從 1.19.0 版或更新版本開始,Amazon S3 的掛載點支援在 S3 Express One Zone 中重新命名物件。如需掛載點的詳細資訊,請參閱使用掛載點