重命名目录存储桶中的对象
使用 RenameObject
操作,您能够以原子方式重命名使用 S3 Express One Zone 存储类的目录存储桶中的现有对象,而无需任何数据移动。您可以通过在同一目录存储桶中将现有对象的名称指定为源,并将该对象的新名称指定为目标,来重命名对象。对于以斜杠 (/
) 分隔符结尾的对象,RenameObject
API 操作将不会成功。有关更多信息,请参阅为 Amazon S3 对象命名。
无论对象的大小如何,RenameObject
操作通常都在毫秒内完成。此功能可加快日志文件管理、媒体处理和数据分析等应用程序的速度。此外,RenameObject
还会保留所有对象元数据属性,包括存储类、加密类型、创建日期、上次修改日期以及校验和属性。
注意
仅存储在 S3 Express One Zone 存储类中的对象才支持 RenameObject
。
要授予对 RenameObject
操作的访问权限,建议您使用 CreateSession
操作来进行基于会话的授权。具体而言,您可以在存储桶策略或基于身份的策略中授予对目录存储桶的 s3express:CreateSession
权限。然后,您对目录存储桶进行 CreateSession
API 调用以获取会话令牌。使用请求标头中的会话令牌,您可以向此操作发出 API 请求。会话令牌过期后,进行另一次 CreateSession
API 调用,以生成新的会话令牌供使用。AWS CLI 和 AWS SDK 将创建和管理您的会话(包括自动刷新会话令牌),以避免在会话到期时服务中断。有关授权的更多信息,请参阅《Amazon S3 API Reference》中的 CreateSession
。要了解有关可用区端点 API 操作的更多信息,请参阅使用 CreateSession
对可用区端点 API 操作进行授权。
如果您不想覆盖现有对象,则可以在 RenameObject
请求中添加带有 ‘*’
值的 If-None-Match
条件标头。如果对象名称已经存在,Amazon S3 将返回 412 Precondition Failed
错误。有关更多信息,请参阅《Amazon S3 API 参考》中的 RenameObject
。
RenameObject
是记录到 AWS CloudTrail 的可用区端点 API 操作(对象级或数据面板操作)。可以使用 CloudTrail 来收集有关对目录存储桶中的对象执行的 RenameObject
操作的信息。有关更多信息,请参阅使用 AWS CloudTrail 对目录存储桶进行日志记录和目录存储桶的 CloudTrail 日志文件示例。
S3 Express One Zone 是唯一支持 RenameObject
的存储类,其定价与 S3 Express One Zone 中的 PUT
、COPY
、POST
和 LIST
请求(每 1000 个请求)相同。有关更多信息,请参阅 Amazon S3 定价
重命名对象
要重命名目录存储桶中的对象,可以使用 Amazon S3 控制台、AWS CLI、AWS SDK、REST API 或适用于 Amazon S3 的 Mountpoint(版本 1.19.0 或更高版本)。
重命名目录存储桶中的对象
登录到 AWS Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 -
在导航窗格中,选择存储桶,然后选择目录存储桶选项卡。导航到包含要重命名的对象的 Amazon S3 目录存储桶。
-
选择要重命名的对象所对应的复选框。
-
在操作菜单中,选择重命名对象。
-
在新对象名称框中,输入对象的新名称。
注意
如果您指定与现有对象相同的对象名称,则操作将失败,并且 Amazon S3 会返回
412 Precondition Failed
错误。对象键名称长度不得超过 1024 字节。对象名称中包含的前缀计入总长度。 选择重命名对象。Amazon S3 随即重命名您的对象。
这些 rename-object
示例显示了如何使用 AWS CLI 来重命名对象。要运行这些命令,请将用户输入占位符
替换为您自己的信息。
以下示例显示如何通过对源对象的 ETag 进行条件检查来重命名对象。
aws s3api rename-object \ --bucket
amzn-s3-demo-bucket--usw2-az1--x-s3
\ --keynew-file.txt
\ --rename-sourceamzn-s3-demo-bucket--usw2-az1--x-s3
/original-file.txt
\ --source-if-match "\"a1b7c3d2e5f6
\""
此命令执行以下操作:
将
amzn-s3-demo-bucket--usw2-az1--x-s3
目录存储桶中的一个对象从original-file.txt
重命名为new-file.txt
。仅当源对象的 ETag 与“
a1b7c3d4e5f6
”匹配时,才执行重命名。
如果 ETag 不匹配,则操作将失败并显示 412
Precondition Failed
错误。
以下示例显示如何通过对新的指定对象名称进行条件检查来重命名对象。
aws s3api rename-object \ --bucket
amzn-s3-demo-bucket--usw2-az1--x-s3
\ --keynew-file.txt
\ --rename-sourceamzn-s3-demo-bucket--usw2-az1--x-s3
/original-file.txt
\ --destination-if-none-match "\"e5f3g7h8i9j0
\""
此命令执行以下操作:
将
amzn-s3-demo-bucket--usw2-az1--x-s3
目录存储桶中的一个对象从original-file.txt
重命名为new-file.txt
。仅当对象存在且对象的 ETag 与“
e5f3g7h8i9j0
”不匹配时,才执行重命名操作。
如果具有新的指定名称和匹配 ETag 的对象已存在,则操作将失败并显示 412 Precondition Failed
错误。
您可以发送 REST 请求来重命名对象。有关更多信息,请参阅《Amazon S3 API 参考》中的 RenameObject
。
从 1.19.0 版本或更高版本起,适用于 Amazon S3 的 Mountpoint 支持重命名 S3 Express One Zone 中的对象。有关 Mountpoint 的更多信息,请参阅使用 Mountpoint。