将对象复制到目录存储桶 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

将对象复制到目录存储桶

复制操作将创建已存储在 Amazon S3 中的对象的副本。您可以在目录存储桶和通用存储桶之间复制对象。您还可以在一个存储桶内复制对象,也可以在同一类型的存储桶之间复制对象,例如,从目录存储桶复制到目录存储桶。

在单个原子操作中,您可以创建最大 5GB 的对象副本。但是,要复制大于 5GB 的对象,您必须使用分段上传 API 操作。有关更多信息,请参阅 对目录桶使用分段上传

权限

要复制对象,您必须拥有以下权限:

  • 要将对象从一个目录存储桶复制到另一个目录存储桶,您必须拥有 s3express:CreateSession 权限。

  • 要将对象从目录存储桶复制到通用存储桶,您必须拥有将对象副本写入目标存储桶的 s3express:CreateSession 权限和 s3:PutObject 权限。

  • 要将对象从通用桶复制到目录桶,您必须拥有读取正在复制的源对象的 s3express:CreateSession 权限和 s3:GetObject 权限。

    有关更多信息,请参阅《Amazon Simple Storage Service API 参考》中的 CopyObject

加密

Amazon S3 会自动加密上传到 S3 存储桶的所有新对象。S3 存储桶的默认加密配置始终处于启用状态,并至少设置为具有 Amazon S3 托管密钥的服务器端加密(SSE-S3)。

对于目录桶,仅支持 SSE-S3。对于通用桶,您可以使用 SSE-S3(默认)、采用 Amazon Key Management Service(Amazon KMS)密钥的服务器端加密(SSE-KMS)、采用 Amazon KMS 密钥的双层服务器端加密(DSSE-KMS),或采用客户提供密钥的服务器端加密(SSE-C)。

如果您发出复制请求将目录桶上的 SSE-C、SSE-KMS 或 DSSE-KMS 参数设置为源或目标,则响应将返回错误。

标签

目录存储桶不支持标签。如果您将带有标签的对象从通用桶复制到目录桶,您会收到 HTTP 501 (Not Implemented) 响应。有关更多信息,请参阅《Amazon Simple Storage Service API 参考》中的 CopyObject

ETag

S3 Express One Zone 的实体标签(ETag)是随机的字母数字字符串,而不是 MD5 校验和。为协助确保对象完整性,请使用额外的校验和。

其他校验和

S3 Express One Zone 可让您选择用于在上传或下载过程中验证数据的校验和算法。您可以选择以下安全哈希算法(SHA)或循环冗余校验(CRC)数据完整性检查算法之一:CRC32、CRC32C、SHA-1 和 SHA-256。S3 Express One Zone 存储类不支持基于 MD5 的校验和。

有关更多信息,请参阅 其他 S3 校验和最佳实践

支持的特征

有关 S3 Express One Zone 支持哪些 Amazon S3 特征的更多信息,请参阅S3 Express One Zone 有哪些不同?

将对象从通用桶或目录桶复制到目录桶
  1. 登录到Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 在左侧导航窗格中,选择存储桶

  3. 选择要从中复制对象的桶:

    • 要从通用桶进行复制,请选择通用桶选项卡。

    • 要从目录桶进行复制,请选择目录桶选项卡。

  4. 选择包含要复制的对象的通用桶或目录桶。

  5. 请选择对象选项卡。在对象页面上,选中要复制的对象名称左侧的复选框。

  6. Actions (操作) 菜单中,选择 Copy (复制)

    将出现复制页面。

  7. 目标下,为您的目标类型选择目录桶。要指定目标路径,请选择浏览 S3,导航到目标,然后选中目标左侧的选项按钮。选择右下角的选择目标

    或者,输入目标路径。

  8. 校验和下,选择是要使用现有校验和函数复制对象,还是用新校验和函数替换现有校验和函数。上传对象时,您可以选择指定用于验证数据完整性的校验和算法。复制对象时,您可以选择新函数。如果您最初没有指定额外的校验和,则可以使用校验和部分添加一个校验和。

    注意

    即使您选择使用相同的校验和函数,但如果对象大小超过 16MB,校验和值也可能会发生变化。由于分段上传的校验和计算方式的原因,校验和值可能会发生变化。有关在复制对象时校验和可能会如何变化的信息,请参阅使用分段级别墅校验和进行分段上传

    要更改校验和函数,请选择用新的校验和函数替换。从下拉列表中选择新的校验和函数。复制对象时,将使用指定的算法计算和存储新校验和。

  9. 选择右下角的复制。Amazon S3 会将对象复制到目标。

将对象从目录存储桶复制到通用存储桶
  1. 登录到Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 在左侧导航窗格中,选择存储桶

  3. 选择目录桶选项卡。

  4. 选择包含您要复制的对象的目录桶。

  5. 请选择对象选项卡。在对象页面上,选中要复制的对象名称左侧的复选框。

  6. Actions (操作) 菜单中,选择 Copy (复制)

  7. 目标下,为您的目标类型选择通用桶。要指定目标路径,请选择浏览 S3,导航到目标,然后选中目标左侧的选项按钮。选择右下角的选择目标

    或者,输入目标路径。

  8. 校验和下,选择是要使用现有校验和函数复制对象,还是用新校验和函数替换现有校验和函数。上传对象时,您可以选择指定用于验证数据完整性的校验和算法。复制对象时,您可以选择新函数。如果您最初没有指定额外的校验和,则可以使用校验和部分添加一个校验和。

    注意

    即使您选择使用相同的校验和函数,但如果对象大小超过 16MB,校验和值也可能会发生变化。由于分段上传的校验和计算方式的原因,校验和值可能会发生变化。有关在复制对象时校验和可能会如何变化的信息,请参阅使用分段级别墅校验和进行分段上传

    要更改校验和函数,请选择用新的校验和函数替换。从下拉列表中选择新的校验和函数。复制对象时,将使用指定的算法计算和存储新校验和。

  9. 选择右下角的复制。Amazon S3 会将对象复制到目标。

SDK for Java 2.x
public static void copyBucketObject (S3Client s3, String sourceBucket, String objectKey, String targetBucket) { CopyObjectRequest copyReq = CopyObjectRequest.builder() .sourceBucket(sourceBucket) .sourceKey(objectKey) .destinationBucket(targetBucket) .destinationKey(objectKey) .build(); String temp = ""; try { CopyObjectResponse copyRes = s3.copyObject(copyReq); System.out.println("Successfully copied " + objectKey +" from bucket " + sourceBucket +" into bucket "+targetBucket); } catch (S3Exception e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } }

以下 copy-object 示例命令显示了如何使用 Amazon CLI 将对象从一个存储桶复制到另一个存储库。您可以在存储桶类型之间复制对象。要运行此命令,请将用户输入占位符替换为您自己的信息。

aws s3api copy-object --copy-source bucket SOURCE_BUCKET/SOURCE_KEY_NAME --key TARGET_KEY_NAME --bucket TARGET_BUCKET_NAME

有关更多信息,请参阅《Amazon CLI 命令参考》中的 copy-object