复制、移动和重命名对象
CopyObject 操作将创建已存储在 Amazon S3 中的对象的副本。
在单个原子操作中,您可以创建最大 5GB 的对象副本。但是,要复制大于 5 GB 的对象,必须通过 AWS CLI 或 AWS SDK 使用分段上传。有关更多信息,请参阅 使用分段上传复制对象。
注意
要保持使用分段上传所上传的对象的性能优势,必须使用 AWS CLI 或 AWS SDK 而不是 S3 控制台,通过分段上传来复制对象。有关更多信息,请参阅 使用分段上传复制对象。
通过使用 CopyObject 操作,您可以:
-
创建对象的其它副本。
-
通过复制对象并删除原始对象来重命名它们。
-
将对象从一个存储桶复制或移动到另一个存储桶,包括跨 AWS 区域(例如,从
us-west-1到eu-west-2)。移动对象时,Amazon S3 将对象复制到指定目标,然后删除源对象。注意
跨 AWS 区域复制或移动对象会产生带宽费用。有关更多信息,请参阅 Amazon S3 定价
。 -
更改对象元数据。每个 Amazon S3 对象都有元数据。此元数据是一组名称/值对。您可以在上传对象时设置对象元数据。上传对象后,您将无法修改对象元数据。修改对象元数据的唯一方式是创建对象的副本并设置元数据。为此,在复制操作中,将相同的对象设置为源和目标。
有些对象元数据是系统元数据,而另外一些则是用户定义的元数据。您可以控制某些系统元数据。例如,您可以控制要用于对象的存储类和服务器端加密的类型。复制对象时,还会复制用户控制的系统元数据和用户定义的元数据。Amazon S3 将重置系统控制的元数据。例如,在复制对象时,Amazon S3 将重置已复制对象的创建日期。您不需要在复制请求中设置任何这些系统控制的元数据值。
复制对象时,您可能会决定更新某些元数据值。例如,如果您的源对象被配置为使用 S3 Standard 存储,您可以选择对对象复制使用 S3 Intelligent-Tiering。您可能还会决定更改源对象上某些用户定义的元数据值。请注意,如果您选择在复制期间更新任意对象的用户可配置元数据(系统或用户定义的元数据),则必须显式指定请求中源对象上存在的所有用户可配置的元数据,即使您只更改其中一个元数据值也是如此。
注意
使用 Amazon S3 控制台复制对象时,您可能会收到错误消息
"Copied metadata can't be verified."控制台使用标头来检索和设置对象的元数据。如果您的网络或浏览器配置修改了网络请求,则此行为可能会导致将意外的元数据(例如修改后的Cache-Control标头)写入复制的对象。Amazon S3 无法验证这种意外的元数据。要解决此问题,请检查您的网络和浏览器配置,以确保它不会修改标头,例如
Cache-Control。有关更多信息,请参阅 The Shared Responsibility Model。有关对象元数据的更多信息,请参阅 使用对象元数据。
复制已存档和已还原的对象
如果源对象归档在 S3 Glacier Flexible Retrieval 或 S3 Glacier Deep Archive 中,您必须先还原临时副本,然后才能将对象复制到另一个存储桶中。有关对象归档的更多信息,请参阅 使用归档的对象。
在 Amazon S3 控制台中,不支持对 S3 Glacier Flexible Retrieval 或 S3 Glacier Deep Archive 存储类中的已还原对象执行复制操作。要复制这些已还原对象,请使用 AWS Command Line Interface(AWS CLI)、AWS SDK 或 Amazon S3 REST API。
复制加密对象
Amazon S3 会自动加密所有复制到 S3 存储桶的新对象。如果您未在复制请求中指定加密信息,则目标对象的加密设置将设为目标存储桶的默认加密配置。默认情况下,所有存储桶都有基本级别的加密配置,该配置使用具有 Amazon S3 托管密钥的服务器端加密(SSE-S3)。如果目标存储桶的默认加密配置使用具有 AWS Key Management Service(AWS KMS)密钥(SSE-KMS)或客户提供加密密钥(SSE-C)的服务器端加密,则 Amazon S3 使用相应的 KMS 密钥或客户提供的密钥来加密目标对象副本。
在复制对象时,如果您希望对目标对象使用其他类型的加密设置,您可以请求 Amazon S3 使用 KMS 密钥、Amazon S3 托管式密钥或客户提供的密钥对目标对象加密。如果您的请求中的加密设置与目标存储桶的默认加密配置不同,则您的请求中的加密设置优先。如果副本的源对象是用 SSE-C 加密的,您必须在请求中提供必需的加密信息,以便 Amazon S3 可以解密对象以进行复制。有关更多信息,请参阅 利用加密来保护数据。
复制对象时使用校验和
复制对象时,可以选择对对象使用不同的校验和算法。无论您选择使用相同的算法还是新算法,Amazon S3 都会在复制对象后计算一个新的校验和值。Amazon S3 不直接复制校验和的值。所有不带校验和及指定的目标校验和算法的复制对象都会自动获得 CRC-64NVME 校验和算法。有关如何计算此校验和的更多信息,请参阅在 Amazon S3 中使用分段上传来上传和复制对象。
在单个请求中复制多个对象
要使用单个请求复制多个 Amazon S3 对象,您还可以使用 S3 批量操作。您为 S3 批量操作提供要操作的对象列表。S3 批量操作调用相应的 API 操作来执行指定的操作。单个批量操作任务可对包含 EB 级数据的数十亿个对象执行指定操作。
S3 批量操作特征包括跟踪进度、发送通知并存储所有操作的详细完成报告,从而提供完全托管、可审核的无服务器体验。您可以通过 Amazon S3 控制台、AWS CLI、AWS SDK 或 REST API 使用 S3 批量操作。有关更多信息,请参阅 S3 批量操作基础知识。
将对象复制到目录存储桶
有关将对象复制到目录存储桶的信息,请参阅从目录存储桶复制对象或向目录存储桶复制对象。有关将 Amazon S3 Express One Zone 存储类与目录存储桶结合使用的信息,请参阅S3 Express One Zone和使用目录存储桶。
复制对象
要复制对象,请使用以下方法。
注意
使用控制台复制对象时的限制和局限性如下所示:
-
如果对象小于 5 GB,则可以复制对象。如果对象大于 5GB,则必须使用 AWS CLI 或 AWS SDK 来复制对象。
-
有关复制对象所需的其它权限的列表,请参阅 Amazon S3 API 操作所需的权限。有关授予此权限的示例策略,请参阅Amazon S3 基于身份的策略示例。
-
Copy操作适用于指定文件夹(前缀)中的所有对象。当正在执行操作时添加到这些文件夹的对象可能受到影响。 -
Amazon S3 控制台不支持跨区域复制使用 SSE-KMS 加密的对象。要跨区域复制使用 SSE-KMS 加密的对象,请使用 AWS CLI、AWS SDK 或 Amazon S3 REST API。
-
无法使用 S3 控制台复制使用客户提供的加密密钥(SSE-C)加密的对象。要复制使用 SSE-C 加密的对象,请使用 AWS CLI、AWS SDK 或 Amazon S3 REST API。
-
复制的对象将不会保留原始对象的对象锁定设置。
-
如果要从中复制对象的存储桶对于 S3 对象所有权使用“强制存储桶拥有者”设置,则对象 ACL 将不会复制到指定的目标。
-
如果要将对象复制到对于 S3 对象所有权使用“强制存储桶拥有者”设置的存储桶,请确保源存储桶也使用“强制存储桶拥有者”设置,或移除对其它 AWS 账户和组的任何对象 ACL 授权。
复制对象
登录到 AWS Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 -
在左侧导航窗格中,选择通用存储桶或目录存储桶。
-
在存储桶列表中,选择包含您想要复制的对象的存储桶的名称。
-
选中要复制的对象名称左侧的复选框。
-
在操作菜单上,从显示的选项列表中选择复制。
-
选择目标类型和目标账户。要指定目标路径,请选择 Browse S3(浏览 S3),导航到目标,然后选中目标左侧的复选框。选择右下角的选择目标。
或者,输入目标路径。
-
如果您未 启用存储桶版本控制,则会看到一则警告,建议您启用存储桶版本控制,以防意外覆盖或删除对象。如果要在此存储桶中保留对象的所有版本,请选择 Enable Bucket Versioning(启用存储桶版本控制)。还可以在目标详细信息中查看默认加密和 S3 对象锁定属性。
-
在其它复制设置下,选择是要复制源设置、请勿指定设置还是指定设置。复制源设置是默认选项。如果您只想复制不带源设置属性的对象,请选择请勿指定设置。选择指定设置,来指定存储类、ACL、对象标签、元数据、服务器端加密和其它校验和的设置。
-
选择右下角的复制。Amazon S3 会将对象复制到目标。
本节中的示例向您展示了如何复制单个操作中大于 5 GB 的对象。要复制大于 5GB 的对象,您必须使用分段上传。有关更多信息,请参阅 使用分段上传复制对象。
本示例描述了如何使用 Amazon S3 REST API 复制对象。有关 REST API 的更多信息,请参阅。CopyObject
本示例将 flotsam 存储桶中的 对象复制到 amzn-s3-demo-bucket1jetsam 存储桶的 对象,同时保留其元数据。amzn-s3-demo-bucket2
PUT /jetsam HTTP/1.1 Host:amzn-s3-demo-bucket2.s3.amazonaws.com x-amz-copy-source: /amzn-s3-demo-bucket1/flotsam Authorization: AWS AKIAIOSFODNN7EXAMPLE:ENoSbxYByFA0UGLZUqJN5EUnLDg= Date: Wed, 20 Feb 2008 22:12:21 +0000
将从以下信息生成签名。
PUT\r\n \r\n \r\n Wed, 20 Feb 2008 22:12:21 +0000\r\n x-amz-copy-source:/amzn-s3-demo-bucket1/flotsam\r\n /amzn-s3-demo-bucket2/jetsam
Amazon S3 将返回以下响应来指定对象的 ETag 及其上次修改的时间。
HTTP/1.1 200 OK x-amz-id-2: Vyaxt7qEbzv34BnSu5hctyyNSlHTYZFMWK4FtzO+iX8JQNyaLdTshL0KxatbaOZt x-amz-request-id: 6B13C3C5B34AF333 Date: Wed, 20 Feb 2008 22:13:01 +0000 Content-Type: application/xml Transfer-Encoding: chunked Connection: close Server: AmazonS3 <?xml version="1.0" encoding="UTF-8"?> <CopyObjectResult> <LastModified>2008-02-20T22:13:01</LastModified> <ETag>"7e9c608af58950deeb370c98608ed097"</ETag> </CopyObjectResult>
也可以使用 AWS Command Line Interface(AWS CLI)复制 S3 对象。有关更多信息,请参阅《AWS CLI Command Reference》中的 copy-object
有关 AWS CLI 的更多信息,请参阅《AWS Command Line Interface 用户指南》中的什么是 AWS Command Line Interface?。
移动对象
要移动对象,请使用以下方法。
注意
-
如果对象小于 5 GB,则可以移动对象。如果对象大于 5GB,必须使用 AWS CLI 或 AWS SDK 来移动对象。
-
有关移动对象所需的其它权限的列表,请参阅 Amazon S3 API 操作所需的权限。有关授予此权限的示例策略,请参阅Amazon S3 基于身份的策略示例。
-
无法使用 Amazon S3 控制台移动使用客户提供的加密密钥(SSE-C)加密的对象。要移动使用 SSE-C 加密的对象,请使用 AWS CLI、AWS SDK 或 Amazon S3 REST API。
-
移动文件夹时,请等待移动操作完成,然后再对文件夹进行其它更改。
-
您不能使用 S3 接入点别名作为 Amazon S3 控制台中移动操作的源或目标。
移动对象
-
登录到 AWS Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 -
在左侧导航窗格中,选择存储桶。导航到包含待移动对象的 Amazon S3 存储桶或文件夹。
-
选中要移动的对象所对应的复选框。
-
在操作菜单上,选择移动。
-
要指定目标路径,请选择浏览 S3,导航到目标,然后选中目标复选框。选择选择目标。
或者,输入目标路径。
-
如果您未 启用存储桶版本控制,则会看到一则警告,建议您启用存储桶版本控制,以防意外覆盖或删除对象。如果要在此存储桶中保留对象的所有版本,请选择 Enable Bucket Versioning(启用存储桶版本控制)。还可以在目标详细信息中查看默认加密和对象锁定属性。
-
在其它复制设置下,选择是要复制源设置、请勿指定设置还是指定设置。复制源设置是默认选项。如果您只想复制不带源设置属性的对象,请选择请勿指定设置。选择指定设置,来指定存储类、ACL、对象标签、元数据、服务器端加密和其它校验和的设置。
-
选择右下角的移动。Amazon S3 将您的对象移动到目标位置。
您也可以使用 AWS Command Line Interface(AWS CLI)移动 S3 对象。有关更多信息,请参阅《AWS CLI Command Reference》中的 mv
有关 AWS CLI 的更多信息,请参阅《AWS Command Line Interface 用户指南》中的什么是 AWS Command Line Interface?。
重命名对象
要重命名对象,请使用以下过程。
注意
-
如果对象小于 5 GB,则可以重命名对象。要重命名大于 5 GB 的对象,必须使用 AWS CLI 或 AWS SDK 来复制具有新名称的对象,然后删除原始对象。
-
有关复制对象所需的其它权限的列表,请参阅 Amazon S3 API 操作所需的权限。有关授予此权限的示例策略,请参阅Amazon S3 基于身份的策略示例。
-
重命名对象将创建具有新的上次修改日期的对象副本,然后在原始对象上添加删除标记。
-
默认加密的存储桶设置会自动应用于任何未加密的指定对象。
-
您无法使用 Amazon S3 控制台来重命名采用客户提供的加密密钥(SSE-C)的对象。要重命名使用 SSE-C 加密的对象,请使用 AWS CLI、AWS SDK 或 Amazon S3 REST API 以新名称复制这些对象。
-
如果此存储桶的 S3 对象所有权使用强制存储桶拥有者设置,则不会复制对象访问控制列表(ACL)。
重命名对象
登录到 AWS Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 -
在导航窗格中,选择存储桶,然后选择通用存储桶选项卡。导航到包含待重命名的对象的 Amazon S3 存储桶或文件夹。
-
选择要重命名的对象所对应的复选框。
-
在操作菜单中,选择重命名对象。
-
在新对象名称框中,输入对象的新名称。
-
在其它复制设置下,选择是要复制源设置、请勿指定设置还是指定设置。复制源设置是默认选项。如果您只想复制不带源设置属性的对象,请选择请勿指定设置。选择指定设置,来指定存储类、ACL、对象标签、元数据、服务器端加密和其它校验和的设置。
-
选择保存更改。Amazon S3 随即重命名您的对象。