无法删除名称中带有空格的S3对象

问题描述 投票:0回答:3

由于拼写错误,我最终创建了许多名称中带有空格的 S3 文件。根据密钥命名指南,我意识到这不是理想情况,但对象现在存在。我尝试从 AWS CLI 和 S3 控制台中删除它们。这两种方法都不会产生错误,但对象不会被删除。我尝试重命名文件以删除有问题的空间,但这在 CLI 和控制台上也失败。我怎样才能删除这些对象?

amazon-s3
3个回答
3
投票

尝试使用 AWS 开发工具包(boto3 命令的链接):

  1. 列出对象 - 请参阅 (boto3) S3.Client.list_objects
  2. 过滤要从列表中删除的对象(键)
  3. 使用
  4. S3.Bucket.delete_objects 删除过滤列表中的对象

1
投票

问题:

当 boto3 检索对象名称时,键中的空格被编码为“+”字符。我不知道为什么空格没有被 url 编码为

%20

虽然这篇文章有可能解释原因的答案
)键名中的其他特殊字符是 url 编码的。讽刺的是,对象名称中的“+”被 boto3 编码为 %2B

解决方案:

在将键名传递给 boto3 delete_objects 方法之前,我以这种方式清理了键:

remove_plus = x-www-form-urlencoded_key.replace("+", " ") uncoded_key = urllib.parse.unquote(remove_plus) response = client.delete_object( Bucket=bucket_name, Key=uncoded_key )

我想有一种更正确的方法来处理 application/x-www-form-urlencoded 类型字符串,但这现在对我有用。


0
投票

aws s3 rm s3://your-bucket-name/folderA/Family Name.txt

因此“Family Name”对象之间有一个空格。

然后你可以像这样删除这个对象:

aws s3 rm s3://your-bucket-name/folderA/Family" "Name.txt

双引号之间应该有一个空格。

© www.soinside.com 2019 - 2024. All rights reserved.