如何通过AWS API端点批量删除S3存储桶内所有对象
无需手动输入所有Key清空S3桶的方法(带AWS签名请求)
核心说明
S3的DeleteObjects API不支持通配符匹配,必须明确指定每个要删除的对象Key——这就是你用*没效果的原因,接口只会把*当成一个具体的对象Key去处理,自然找不到匹配的内容。
可行流程
正确的做法是先批量获取桶内所有对象的Key,再分批次调用DeleteObjects完成删除,全程都可以通过带AWS签名的请求实现:
调用ListObjectsV2 API拉取所有对象Key
- 请求URL:
https://bucket-name.s3.us-east-1.amazonaws.com/?list-type=2 - 请求头沿用你之前的签名配置(
X-Amz-Date、Authorization等字段) - 注意:这个接口单次最多返回1000个对象,如果桶内对象超过1000个,需要用响应里的
NextContinuationToken参数循环请求,直到拿到所有对象的Key。
- 请求URL:
构造批量删除请求体
- 把拿到的所有对象Key按XML格式组装,单次最多可删除1000个对象:
<Delete> <Object><Key>object-key-1</Key></Object> <Object><Key>object-key-2</Key></Object> <!-- 依次添加所有需要删除的对象Key --> </Delete> - 用你之前的DeleteObjects请求URL(
https://bucket-name.s3.us-east-1.amazonaws.com/?delete),带上签名请求头发送即可。
- 把拿到的所有对象Key按XML格式组装,单次最多可删除1000个对象:
特殊场景处理:开启版本控制的桶
如果你的桶开启了版本控制,除了当前版本的对象,还需要处理历史版本和删除标记:
- 调用
ListObjectVersionsAPI获取所有版本的Key和对应的VersionId - 构造DeleteObjects请求时,每个Object节点需额外带上
VersionId:<Delete> <Object><Key>object-key-1</Key><VersionId>version-id-1</VersionId></Object> <!-- 依次添加所有带版本ID的对象 --> </Delete> - 同样要把所有删除标记(Delete Marker)按上述格式加入请求体,确保彻底清空桶内内容。
操作验证
删除完成后,再次调用ListObjectsV2 API确认桶内已无对象,即可确保操作成功。
内容的提问来源于stack exchange,提问作者Prakrit Raj
相关产品推荐
相关产品推荐

