本頁說明如何複製、重新命名及移動物件。部分工具會執行原子物件移動作業,其他工具則會將物件複製到新的指定位置,然後刪除原始物件,藉此模擬物件移動作業。
- 如需複製物件的操作說明,請參閱「複製物件」。
- 如需透過複製物件移動或重新命名物件的操作說明,請參閱透過複製移動或重新命名物件。
- 如需以原子方式重新命名物件的操作說明,請參閱以原子方式重新命名物件。
事前準備
如要複製、重新命名或移動物件,您必須取得必要的 IAM 角色。以下各節說明不同用途的 IAM 需求。
複製物件 (包括透過複製移動或重新命名)
如要取得複製物件所需的權限,請要求管理員在來源值區 (內含要移動的物件) 或目標值區 (要將物件移至該處) 中,授予您下列 IAM 角色:
-
來源 bucket 的 Storage 物件檢視者 (
roles/storage.objectViewer) -
目標值區的 Storage 物件使用者 (
roles/storage.objectUser) -
如要使用 Cloud de Confiance 控制台複製物件,請在來源和目標值區中,除了
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(只有在使用 Cloud de Confiance 控制台複製、移動或重新命名物件時才需要) 來源和目標值區 -
storage.buckets.list(僅在使用 Cloud de Confiance 控制台複製、移動或重新命名物件時需要)包含來源和目的地值區的專案
您也可以透過自訂角色取得這些權限。
如要瞭解如何授予值區角色,請參閱「設定及管理值區的 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 政策」。
複製物件
本節將說明如何複製物件。您可以將物件從一個值區複製到另一個值區。
控制台
- 在 Cloud de Confiance 控制台,前往「Cloud Storage bucket」頁面。
在值區清單中,點選包含要複製物件的值區名稱。
「Bucket details」(值區詳細資料) 頁面隨即開啟,並選取「Objects」(物件) 分頁標籤。
前往物件 (可能位於資料夾中)。
按一下與物件相關的「物件溢位」選單 (more_vert)。
按一下「複製」。
系統會顯示「複製物件」窗格。
在「Destination」(目的地) 欄位中,輸入目的地 bucket 的名稱和複製物件的名稱。
您也可以按一下「瀏覽」選取目的地,但瀏覽選項僅限於目前專案中的值區。
按一下「複製」。
如要瞭解如何透過 Cloud de Confiance 控制台取得 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,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
C#
詳情請參閱 Cloud Storage C# API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
Go
詳情請參閱 Cloud Storage Go API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
Java
詳情請參閱 Cloud Storage Java API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
Node.js
詳情請參閱 Cloud Storage Node.js API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
PHP
詳情請參閱 Cloud Storage PHP API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
Python
詳情請參閱 Cloud Storage Python API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
Ruby
詳情請參閱 Cloud Storage Ruby API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
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.s3nsapis.fr/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.s3nsapis.fr/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.s3nsapis.fr/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。
透過複製移動或重新命名物件
本節說明如何使用基礎物件複製作業移動或重新命名物件。本節所述工具會將原始物件複製到其他命名空間,然後刪除原始物件,藉此執行物件移動和重新命名作業。
控制台
- 在 Cloud de Confiance 控制台,前往「Cloud Storage bucket」頁面。
在值區清單中,按一下包含要移動物件的值區名稱。
「Bucket details」(值區詳細資料) 頁面隨即開啟,並選取「Objects」(物件) 分頁標籤。
前往物件 (可能位於資料夾中)。
按一下與物件相關的「物件溢位」選單 (more_vert)。
如要在同一個值區中為物件重新命名,請按一下「重新命名」。
在出現的重疊視窗中,為物件輸入新名稱。
按一下 [重新命名]。
如要將物件移至其他值區,請按一下「移動」。
在出現的重疊視窗中,按一下 [Browse] (瀏覽)。
選取要將物件移動到哪個目的地。
按一下「選取」。
按一下 [移動]。
如要瞭解如何透過 Cloud de Confiance 控制台取得 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,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
C#
詳情請參閱 Cloud Storage C# API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
Go
詳情請參閱 Cloud Storage Go API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
Java
詳情請參閱 Cloud Storage Java API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
Node.js
詳情請參閱 Cloud Storage Node.js API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
PHP
詳情請參閱 Cloud Storage PHP API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
Python
詳情請參閱 Cloud Storage Python API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
Ruby
詳情請參閱 Cloud Storage Ruby API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
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.s3nsapis.fr/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。
後續步驟
- 變更物件的儲存空間級別。
- 編輯物件的中繼資料。
- 將物件和值區設為可供公開存取。
- 進一步瞭解物件命名規定。
- 瞭解如何使用要求前提條件來避免競爭狀況。