由于拼写错误,我最终创建了许多名称中带有空格的 S3 文件。根据密钥命名指南,我意识到这不是理想情况,但对象现在存在。我尝试从 AWS CLI 和 S3 控制台中删除它们。这两种方法都不会产生错误,但对象不会被删除。我尝试重命名文件以删除有问题的空间,但这在 CLI 和控制台上也失败。我怎样才能删除这些对象?
尝试使用 AWS 开发工具包(boto3 命令的链接):
当 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 类型字符串,但这现在对我有用。
aws s3 rm s3://your-bucket-name/folderA/Family Name.txt
因此“Family Name”对象之间有一个空格。
然后你可以像这样删除这个对象:
aws s3 rm s3://your-bucket-name/folderA/Family" "Name.txt