本页面介绍了如何在 Cloud Storage 中的存储桶内和存储桶之间复制、重命名和移动对象。
请注意,虽然 Cloud Storage 中的某些工具使对象移动或重命名操作看起来像是一种单一的操作,但此类操作始终是由两种操作构成的:首先对原始对象执行复制操作,然后对该对象执行删除操作,因为对象是immutable。
复制对象
要复制其中一个 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
客户端库
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
标头生成访问令牌。或者,您可以创建访问令牌(使用 OAuth 2.0 Playground),并将其包含在
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 }
XML API
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。或者,您可以创建访问令牌(使用 OAuth 2.0 Playground),并将其包含在
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
。
移动或重命名对象
如需在存储桶之间移动 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
客户端库
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
我们建议使用 Storage Transfer Service 在存储桶之间移动超过 1 TB 的数据。
后续步骤
- 更改对象的存储类别。
- 修改对象的元数据。
- 将对象和存储桶设置为可被公开访问。
- 详细了解对象命名要求。
- 了解如何使用请求前提条件来防止出现竞态条件。