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