本頁說明如何複製、重新命名及移動物件。部分工具會執行原子物件移動作業,其他工具則會將物件複製到指定的新位置,然後刪除原始物件,藉此模擬物件移動作業。
- 如需複製物件的操作說明,請參閱「複製物件」。
- 如需透過複製物件移動或重新命名物件的操作說明,請參閱透過複製移動或重新命名物件。
- 如需以原子方式重新命名物件的操作說明,請參閱以原子方式重新命名物件。
建議使用 Storage 移轉服務在值區之間移動超過 1 TB 的資料。
事前準備
如要複製、重新命名或移動物件,您必須取得必要的 IAM 角色。以下各節說明不同用途的 IAM 需求。
複製物件 (包括透過複製移動或重新命名)
如要取得複製物件所需的權限,請要求管理員在來源值區 (內含要移動的物件) 或目標值區 (要將物件移至該處) 中,授予您下列 IAM 角色:
-
來源 bucket 的 Storage 物件檢視者 (
roles/storage.objectViewer
) -
目標值區的 Storage 物件使用者 (
roles/storage.objectUser
) -
如要使用 Google Cloud 控制台複製物件,請在來源值區和目標值區中,除了
roles/storage.objectViewer
和roles/storage.objectUser
之外,還要有檢視者基本角色 (roles/viewer
)。
這些預先定義的角色具備複製物件所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:
所需權限
如要複製物件,必須具備下列權限:
-
storage.objects.get
來源 bucket -
storage.objects.create
目的地 bucket -
storage.objects.delete
(只有在複製或移動物件時,需要取代或覆寫目的地 bucket 中的物件時,才需要這項權限) 目的地 bucket -
storage.objects.delete
(僅在您使用基礎複製和刪除作業移動物件時需要) 來源 bucket -
storage.folders.create
(只有在要移動的物件位於您要在目的地 bucket 中建立的資料夾時,才需要此參數) 目的地 bucket -
storage.objects.list
(僅在您使用 Google Cloud 控制台複製、移動或重新命名物件時需要) 來源和目標值區 -
storage.buckets.list
(僅在使用 Google Cloud 控制台複製、移動或重新命名物件時需要)包含來源和目的地值區的專案
您也可以透過自訂角色取得這些權限。
如要瞭解如何授予值區角色,請參閱「搭配值區使用 IAM」。如要瞭解如何授予專案角色,請參閱「管理專案存取權」。
如果想複製的物件已啟用特定功能,您可能需要額外或替代角色。舉例來說,如果想複製的物件具有要保留的物件保留設定,您需要在目標值區中具備包含 storage.objects.setRetention
權限的角色,例如 Storage 物件管理員 (roles/storage.objectAdmin
) 角色。詳情請參閱「Cloud Storage 的 IAM 權限」。
以原子方式重新命名物件
如要取得以原子方式重新命名物件所需的權限,請要求管理員授予您 bucket 的「Storage 物件使用者」 (roles/storage.objectUser
) 身分與存取權管理角色。該 bucket 必須包含您要重新命名的物件。
這個預先定義的角色具備以原子方式重新命名物件所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:
所需權限
如要以原子方式重新命名物件,您必須具備下列權限:
-
storage.objects.move
-
storage.objects.create
-
storage.objects.delete
(只有在覆寫或取代物件時才需要)
您也可以透過自訂角色取得這些權限。
如要瞭解如何授予值區角色,請參閱「搭配值區使用 IAM」。
複製物件
本節說明如何複製物件。您可以將物件從一個值區複製到另一個值區。
控制台
- 在 Google Cloud 控制台,前往「Cloud Storage bucket」頁面。
在值區清單中,點選包含要複製物件的值區名稱。
系統會開啟「Bucket details」(值區詳細資料) 頁面,並選取「Objects」(物件) 分頁標籤。
前往物件 (可能位於資料夾中)。
按一下與物件相關的「物件溢位」選單 (more_vert)。
按一下「複製」。
系統會顯示「複製物件」窗格。
在「Destination」(目的地) 欄位中,輸入目的地 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
是包含要複製物件的值區名稱。例如:my-bucket
。SOURCE_OBJECT_NAME
是要複製的物件名稱。例如:pets/dog.png
。DESTINATION_BUCKET_NAME
是要將物件複製到的值區名稱。例如: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,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
REST API
JSON API
安裝並初始化 gcloud CLI,以便為
Authorization
標頭產生存取權杖。使用
cURL
透過POST
物件要求呼叫 JSON API: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
是包含要複製物件的值區名稱。例如:my-bucket
。SOURCE_OBJECT_NAME
是要複製的物件名稱 (經過網址編碼)。例如pets/dog.png
,網址編碼為pets%2Fdog.png
。DESTINATION_BUCKET_NAME
是要將物件複製到的值區名稱。例如: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
值。- 所有其他值都與先前要求中使用的值相符。
物件完全複製完畢後,最後一個回應會有一個設為
true
的done
屬性,沒有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
是包含要複製物件的值區名稱。例如:my-bucket
。SOURCE_OBJECT_NAME
是要複製的物件名稱。例如:pets/dog.png
。DESTINATION_BUCKET_NAME
是要將物件複製到的值區名稱。例如:another-bucket
。NAME_OF_COPY
是您要給予複製物件的網址編碼名稱。例如:shiba.png
。
透過複製移動或重新命名物件
本節說明如何使用基礎物件複製作業移動或重新命名物件。本節所述工具會將原始物件複製到其他命名空間,然後刪除原始物件,藉此執行物件移動和重新命名作業。
控制台
- 在 Google Cloud 控制台,前往「Cloud Storage bucket」頁面。
在值區清單中,按一下包含要移動物件的值區名稱。
系統會開啟「Bucket details」(值區詳細資料) 頁面,並選取「Objects」(物件) 分頁標籤。
前往物件 (可能位於資料夾中)。
按一下與物件相關的「物件溢位」選單 (more_vert)。
如要在同一個值區中為物件重新命名,請按一下「重新命名」。
在出現的重疊視窗中,為物件輸入新名稱。
按一下 [重新命名]。
如要將物件移至其他值區,請按一下「移動」。
在出現的重疊視窗中,按一下 [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
是包含要移動或重新命名物件的值區名稱。例如:my-bucket
。SOURCE_OBJECT_NAME
是要移動或重新命名的物件名稱。例如:pets/dog.png
。DESTINATION_BUCKET_NAME
是要將物件移動到的值區名稱。例如: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,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
REST API
以原子方式重新命名物件
本節說明如何以原子方式重新命名值區中的物件。如要重新命名物件,可以使用 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
是包含要重新命名物件的值區名稱。例如:my-bucket
。SOURCE_OBJECT_NAME
是要重新命名物件的網址編碼名稱。例如:pets/dog.png
,網址編碼為pets%2Fdog.png
。DESTINATION_OBJECT_NAME
是您要使用的網址編碼名稱。例如pets/cat.png
,網址編碼為pets%2Fcat.png
。
後續步驟
- 變更物件的儲存空間級別。
- 編輯物件的中繼資料。
- 將物件和值區設為可供公開存取。
- 進一步瞭解物件命名規定。
- 瞭解如何使用要求前提條件來避免競爭狀況。