本页面介绍了如何在 Cloud Storage 中的存储桶内和存储桶之间复制、重命名和移动对象。
请注意,虽然 Cloud Storage 中的某些工具使对象移动或重命名操作看起来像是一种单一的操作,但此类操作始终是由两种操作构成的:首先对原始对象执行复制操作,然后对该对象执行删除操作,因为对象是不可变的。
复制对象
所需的角色
如需获得复制对象所需的权限,请让您的管理员为您授予源存储桶的 Storage Object Viewer (roles/storage.objectViewer
) 角色和目标存储桶的 Storage Object User (roles/storage.objectUser
) 角色。如果您打算使用 Google Cloud 控制台,请让您的管理员除了授予 Storage Object Viewer 和 Storage Object User 角色外,还为您授予包含源存储分区和目标存储分区的项目的“Viewer”基本角色。
这些角色可提供复制对象所需的以下权限:
- 针对源存储桶的
storage.objects.get
- 针对目标存储桶的
storage.objects.create
- 针对目标存储桶的
storage.objects.delete
权限(仅当覆盖对象时才需要)
使用 Google Cloud 控制台时,您还必须拥有以下权限:
- 针对源存储桶和目标存储桶的
storage.objects.list
权限 - 针对包含源存储桶和目标存储桶的项目的
storage.buckets.list
权限
如果您要复制的对象启用了功能,您可能需要其他角色。例如,如果您要复制的对象具有您要保留的对象保留配置,则您需要对目标存储桶具有可提供 storage.objects.setRetention
权限的角色,例如 Storage Object Admin (roles/storage.objectAdmin
) 角色。
如需了解如何授予存储桶的角色,请参阅将 IAM 与存储桶搭配使用。
如需了解如何授予项目的角色,请参阅管理对项目的访问权限。
要复制其中一个 Cloud Storage 存储分区中的对象,请执行以下操作:
- 在 Google Cloud 控制台中,前往 Cloud Storage 存储分区页面。
在存储桶列表中,找到包含要复制的对象的存储桶,并点击其名称。
此时会打开“存储桶详情”页面,其中“对象”标签页已选中。
导航到可能位于文件夹中的对象。
点击与对象关联的对象溢出菜单 (more_vert)。
点击复制。
此时系统会显示复制对象窗格。
在目的地字段中,输入目的地存储桶的名称和复制的对象的名称。
您也可以点击浏览来选择目标,但浏览选项仅限于当前项目中的存储桶。
点击复制。
如需了解如何在 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
如需了解详情,请参阅 Cloud Storage C++ API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
如需了解详情,请参阅 Cloud Storage C# API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
如需了解详情,请参阅 Cloud Storage PHP API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
如需了解详情,请参阅 Cloud Storage Ruby API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。使用
cURL
通过POST
Object 请求调用 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
值。- 所有其他值均与上一个请求中使用的值相匹配。
完整复制对象后,最后一个响应将包含一个
done
属性(设置为true
),没有rewriteToken
属性,副本的元数据包含在resource
属性中。{ "kind": "storage#rewriteResponse", "totalBytesRewritten": 10000000000, "objectSize": 10000000000, "done": true, "resource": objects Resource }
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。使用
cURL
,通过PUT
Object 请求调用 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
。
移动或重命名对象
所需的角色
如需获得移动或重命名对象所需的权限,请让您的管理员为您授予源存储桶和目标存储桶的 Storage Object User (roles/storage.objectUser
) 角色。如果您打算使用 Google Cloud 控制台,请让您的管理员除了授予 Storage Object User 角色,还为您授予包含源存储分区和目标存储分区的项目的“Viewer”基本角色。
这些角色可提供移动或重命名对象所需的以下权限:
- 针对源存储桶的
storage.objects.delete
权限(如果覆盖对象,还需要针对目标存储桶的此权限) - 针对源存储桶的
storage.objects.get
- 针对目标存储桶的
storage.objects.create
使用 Google Cloud 控制台时,您还必须拥有以下权限:
- 针对源存储桶和目标存储桶的
storage.objects.list
权限 - 针对包含源存储桶和目标存储桶的项目的
storage.buckets.list
权限
如果您要移动或重命名的对象已启用功能,您可能需要其他角色。例如,如果您要移动的对象具有对象保留配置,则您需要对目标存储桶具有可提供 storage.objects.setRetention
权限的角色,例如 Storage Object Admin (roles/storage.objectAdmin
) 角色。
如需了解如何授予存储桶的角色,请参阅将 IAM 与存储桶搭配使用。
如需了解如何授予项目的角色,请参阅管理对项目的访问权限。
如需在存储桶之间移动 Cloud Storage 中的对象,或者重命名存储桶中的对象,请执行以下操作:
- 在 Google Cloud 控制台中,前往 Cloud Storage 存储分区页面。
在存储桶列表中,找到包含要移动或重命名的对象的存储桶,并点击其名称。
此时会打开“存储桶详情”页面,其中“对象”标签页已选中。
导航到可能位于文件夹中的对象。
点击与对象关联的对象溢出菜单 (more_vert)。
如果要在同一存储桶中为对象指定一个新名称,请点击重命名。
在出现的叠加窗口中,输入对象的新名称。
点击重命名。
如果要将对象移动到其他存储桶,请点击移动。
在出现的叠加窗口中,点击浏览。
选择对象要移动到的目的地。
点击选择。
点击移动。
如需了解如何在 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
如需了解详情,请参阅 Cloud Storage C++ API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
如需了解详情,请参阅 Cloud Storage C# API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
如需了解详情,请参阅 Cloud Storage PHP API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
如需了解详情,请参阅 Cloud Storage Ruby API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
我们建议使用 Storage Transfer Service 在存储桶之间移动超过 1 TB 的数据。
后续步骤
- 更改对象的存储类别。
- 修改对象的元数据。
- 将对象和存储桶设置为可被公开访问。
- 详细了解对象命名要求。
- 了解如何使用请求前提条件来防止出现竞态条件。