本頁面說明如何複製、重新命名及移動物件。有些工具會執行原子物件移動作業,其他工具則會將物件複製到新的指定位置,然後刪除原始物件,藉此模擬物件移動作業。
- 如需複製物件的操作說明,請參閱「複製物件」。
- 如需透過複製來移動或重新命名物件的操作說明,請參閱「透過複製來移動或重新命名物件」。
- 如要瞭解如何以不可分割的方式重新命名物件,請參閱「以不可分割的方式重新命名物件」。
如要在 bucket 之間移動超過 1 TB 的資料,建議使用 Storage 移轉服務。
事前準備
如要複製、重新命名或移動物件,您必須取得必要的 IAM 角色。以下各節說明不同用途的 IAM 需求。
複製物件 (包括透過複製移動或重新命名)
如要取得複製物件所需的權限,請要求管理員在下列位置授予您 IAM 角色:包含要移動物件的來源 bucket,或要移動物件的目的地 bucket:
- 來源 bucket 的 Storage 物件檢視者 (
roles/storage.objectViewer) - 目標值區的 Storage 物件使用者 (
roles/storage.objectUser) -
如要使用 Google Cloud 控制台複製物件,您必須在來源 bucket 和目的地 bucket 中具備「檢視者」基本角色 (
roles/viewer),此外還需要roles/storage.objectViewer和roles/storage.objectUser。
這些預先定義的角色具備複製物件所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
所需權限
如要複製物件,必須具備下列權限:
-
storage.objects.get來源 bucket -
目的地 bucket 的
storage.objects.create -
storage.objects.delete(只有在物件複製或移動作業中,您要取代或覆寫目的地 bucket 中的物件時,才需要這個選項) 目的地 bucket -
storage.objects.delete(只有在使用基礎複製和刪除作業移動物件時才需要) 來源 bucket -
storage.folders.create(只有在要移動的物件位於您要在目的地 bucket 中建立的資料夾時,才需要此參數) 目的地 bucket -
storage.objects.list(只有在使用 Google Cloud 控制台複製、移動或重新命名物件時才需要) (來源和目的地 bucket) -
storage.buckets.list(只有在使用 Google Cloud 控制台複製、移動或重新命名物件時才需要) ,適用於包含來源和目的地 bucket 的專案
您也可以透過自訂角色取得這些權限。
如要瞭解如何授予 bucket 角色,請參閱「在 bucket 上設定及管理 IAM 政策」。如要瞭解如何授予專案角色,請參閱「管理專案存取權」。
如果想複製的物件已啟用特定功能,您可能需要其他或替代角色。舉例來說,如果您要複製的物件具有您想保留的物件保留設定,則目的地值區的角色必須包含 storage.objects.setRetention 權限,例如 Storage 物件管理員 (roles/storage.objectAdmin) 角色。詳情請參閱「Cloud Storage 的 IAM 權限」。
以原子方式重新命名物件
如要取得不可分割地重新命名物件所需的權限,請要求管理員針對包含要重新命名物件的 bucket,授予您 Storage 物件使用者 (roles/storage.objectUser) IAM 角色。
這個預先定義的角色具備以原子方式重新命名物件所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
所需權限
必須具備下列權限,才能自動重新命名物件:
-
storage.objects.move -
storage.objects.create -
storage.objects.delete(只有在覆寫或取代物件時才需要)
您也可以透過自訂角色取得這些權限。
如要瞭解如何授予 bucket 角色,請參閱「在 bucket 上設定及管理 IAM 政策」。
複製物件
本節說明如何複製物件。您可以將物件從一個 bucket 複製到另一個 bucket。
控制台
- 前往 Google Cloud 控制台的「Cloud Storage bucket」頁面。
在 bucket 清單中,點選含有要複製物件的 bucket 名稱。
系統會開啟「Bucket details」(值區詳細資料) 頁面,並選取「Objects」(物件) 分頁標籤。
前往該物件 (可能位於資料夾中)。
按一下與物件相關的物件溢位選單 (more_vert)。
點選「複製」。
系統會顯示「複製物件」窗格。
在「Destination」(目的地) 欄位中,輸入目的地 bucket 的名稱和複製物件的名稱。
您也可以按一下「Browse」(瀏覽) 來選取目的地,但瀏覽選項僅限於目前專案中的 bucket。
點選「複製」。
如要瞭解如何在 Google Cloud 控制台中取得 Cloud Storage 作業失敗的詳細錯誤資訊,請參閱「疑難排解」一文。
指令列
使用 gcloud storage cp 指令:
gcloud storage cp gs://SOURCE_BUCKET_NAME/SOURCE_OBJECT_NAME gs://DESTINATION_BUCKET_NAME/NAME_OF_COPY
其中:
SOURCE_BUCKET_NAME是要複製物件的 bucket 名稱。例如:my-bucket。SOURCE_OBJECT_NAME是要複製的物件名稱。例如:pets/dog.png。DESTINATION_BUCKET_NAME是要複製物件的 bucket 名稱。例如:another-bucket。NAME_OF_COPY是您要為物件副本指定的名稱。例如:shiba.png。
如果成功,回應會與下列範例類似:
Copying gs://example-bucket/file.txt to gs://other-bucket/file-copy.txt Completed files 1/1 | 164.3kiB/164.3kiB
用戶端程式庫
C++
詳情請參閱 Cloud Storage C++ API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
C#
詳情請參閱「Cloud Storage C# API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Go
詳情請參閱 Cloud Storage Go API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Java
詳情請參閱 Cloud Storage Java API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Node.js
詳情請參閱「Cloud Storage Node.js API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
PHP
詳情請參閱「Cloud Storage PHP API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Python
詳情請參閱 Cloud Storage Python API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Ruby
詳情請參閱 Cloud Storage Ruby API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Rust
REST API
JSON API
安裝並初始化 gcloud CLI,以便為
Authorization標頭產生存取權杖。使用
cURL呼叫 JSON API,並發出POST物件要求:curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Length: 0" \ "https://storage.googleapis.com/storage/v1/b/SOURCE_BUCKET_NAME/o/SOURCE_OBJECT_NAME/rewriteTo/b/DESTINATION_BUCKET_NAME/o/NAME_OF_COPY"
其中:
SOURCE_BUCKET_NAME是要複製物件的 bucket 名稱。例如:my-bucket。SOURCE_OBJECT_NAME是要複製的物件名稱,採用網址編碼格式。例如pets/dog.png,網址編碼為pets%2Fdog.png。DESTINATION_BUCKET_NAME是要複製物件的 bucket 名稱。例如:another-bucket。NAME_OF_COPY是您要為物件副本指定的網址編碼名稱。例如:shiba.png。
由於
rewrite方法會以有限大小的區塊複製資料,因此複製作業可能需要多個要求,尤其是大型物件。舉例來說,以下是
rewrite要求的相關回應,指出您需要提出額外的rewrite要求:{ "kind": "storage#rewriteResponse", "totalBytesRewritten": 1048576, "objectSize": 10000000000, "done": false, "rewriteToken": TOKEN_VALUE }在後續要求中使用
rewriteToken以繼續複製資料:curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Length: 0" \ -d '{"rewriteToken": "TOKEN_VALUE"}' \ "https://storage.googleapis.com/storage/v1/b/SOURCE_BUCKET_NAME/o/SOURCE_OBJECT_NAME/rewriteTo/b/DESTINATION_BUCKET_NAME/o/NAME_OF_COPY"其中:
TOKEN_VALUE是前一個要求傳回的rewriteToken值。- 其他值則與先前要求中使用的值相同。
物件完全複製後,最後一個回應的
done屬性會設為true,沒有rewriteToken屬性,且副本的中繼資料會包含在resource屬性中。{ "kind": "storage#rewriteResponse", "totalBytesRewritten": 10000000000, "objectSize": 10000000000, "done": true, "resource": objects Resource }
XML API
安裝並初始化 gcloud CLI,以便為
Authorization標頭產生存取權杖。使用
cURL透過PUT物件要求呼叫 XML API:curl -X PUT \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-copy-source: SOURCE_BUCKET_NAME/SOURCE_OBJECT_NAME" \ "https://storage.googleapis.com/DESTINATION_BUCKET_NAME/NAME_OF_COPY"
其中:
SOURCE_BUCKET_NAME是要複製物件的 bucket 名稱。例如:my-bucket。SOURCE_OBJECT_NAME是要複製的物件名稱。例如:pets/dog.png。DESTINATION_BUCKET_NAME是要複製物件的 bucket 名稱。例如:another-bucket。NAME_OF_COPY是要為物件副本指定的網址編碼名稱。例如:shiba.png。
透過複製移動或重新命名物件
本節說明如何使用基礎物件複製作業,移動或重新命名物件。本節所述的工具會將原始物件複製到其他命名空間,然後刪除原始物件,藉此執行物件移動和重新命名作業。
控制台
- 前往 Google Cloud 控制台的「Cloud Storage bucket」頁面。
在 bucket 清單中,點選含有要移動物件的 bucket 名稱。
系統會開啟「Bucket details」(值區詳細資料) 頁面,並選取「Objects」(物件) 分頁標籤。
前往該物件 (可能位於資料夾中)。
按一下與物件相關聯的「Object overflow」(物件溢位) 選單 (more_vert)。
如要為同一個 bucket 中的物件指定新名稱,請按一下「Rename」(重新命名)。
在出現的重疊視窗中,為物件輸入新名稱。
按一下 [重新命名]。
如要將物件移至其他 bucket,請按一下「Move」(移動)。
在出現的重疊視窗中,按一下 [Browse] (瀏覽)。
選取要移動的物件目的地。
按一下「選取」。
按一下 [移動]。
如要瞭解如何在 Google Cloud 控制台中取得 Cloud Storage 作業失敗的詳細錯誤資訊,請參閱「疑難排解」一文。
指令列
使用 gcloud storage mv 指令:
gcloud storage mv gs://SOURCE_BUCKET_NAME/SOURCE_OBJECT_NAME gs://DESTINATION_BUCKET_NAME/DESTINATION_OBJECT_NAME
其中:
SOURCE_BUCKET_NAME是 bucket 的名稱,其中包含您要移動或重新命名的物件。例如:my-bucket。SOURCE_OBJECT_NAME是要移動或重新命名的物件名稱。例如:pets/dog.png。DESTINATION_BUCKET_NAME是要將物件移至的 bucket 名稱。例如:another-bucket。DESTINATION_OBJECT_NAME是指物件在移動或重新命名後要使用的名稱。例如:shiba.png。
如果成功,回應會與下列範例相似:
Copying gs://example-bucket/old-file.txt to gs://new-bucket/new-file.txt Removing gs://example-bucket/old-file.txt... Completed files 1/1 | 164.3kiB/164.3kiB
用戶端程式庫
C++
詳情請參閱 Cloud Storage C++ API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
C#
詳情請參閱 Cloud Storage C# API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Go
詳情請參閱「Cloud Storage Go API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Java
詳情請參閱「Cloud Storage Java API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Node.js
詳情請參閱 Cloud Storage Node.js API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
PHP
詳情請參閱 Cloud Storage PHP API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Python
詳情請參閱「Cloud Storage Python API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Ruby
詳情請參閱「Cloud Storage Ruby API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Rust
REST API
以不可分割的方式重新命名物件
本節說明如何以不可分割的方式重新命名 bucket 中的物件。如要重新命名物件,可以使用 Cloud Storage JSON API 中的 Objects: move 方法。
REST API
JSON API
安裝並初始化 gcloud CLI,以便為
Authorization標頭產生存取權杖。使用
cURL來透過Objects: move要求呼叫呼叫 JSON API:curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Length: 0" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o/SOURCE_OBJECT_NAME/moveTo/o/DESTINATION_OBJECT_NAME"
其中:
BUCKET_NAME是 bucket 的名稱,其中包含要重新命名的物件。例如:my-bucket。SOURCE_OBJECT_NAME是要重新命名的物件名稱,以網址編碼。例如,pets/dog.png,網址編碼為pets%2Fdog.png。DESTINATION_OBJECT_NAME是您要使用的網址編碼名稱。例如pets/cat.png,網址編碼為pets%2Fcat.png。
後續步驟
- 變更物件的儲存空間級別。
- 編輯物件的中繼資料。
- 將物件和值區設為可供公開存取。
- 進一步瞭解物件命名規定。
- 瞭解如何使用要求前置條件,避免競爭狀況。