我正在尝试删除S3项目列表,但注意到API调用的响应似乎不正确:
根据API,response仅应包含已删除列表:
已删除
成功删除的容器元素。它确定了 已成功删除的对象。
儿童:Key,VersionId
类型:容器
祖先:DeleteResult
delete_json是:
{
'Objects':[
{
'Key':'test1'
},
{
'Key':'test2'
},
{
'Key':'test3'
},
{
'Key':'test4'
}
],
'Quiet':False
}
要删除的Python代码:
response = self.client.delete_objects(Bucket=s3_bucket, Delete=delete_json)
,回复是:
{
'Deleted':[
{
'DeleteMarkerVersionId':'null',
'Key':'test1',
'DeleteMarker':True
},
{
'DeleteMarkerVersionId':'null',
'Key':'test2',
'DeleteMarker':True
},
{
'DeleteMarkerVersionId':'null',
'Key':'test3',
'DeleteMarker':True
},
{
'DeleteMarkerVersionId':'null',
'Key':'test4',
'DeleteMarker':True
}
],
'ResponseMetadata':{
'HostId':'JDl4XNrK02lfBLXCDDIJjuPXG6tOovOp0dtCv7eMlHc0hGC2L7eSV/wb/XRBFyYQ9mHHzb0O/Yg=',
'HTTPStatusCode':200,
'RequestId':'2F2A9FAE7F906B8'
}
}
这是一个错误吗?
答案 0 :(得分:1)
正如您在评论中确认的那样,此存储桶启用了版本控制,随后被暂停。
这与从未启用过版本控制的存储桶不同。一旦存储桶启用了版本控制,它始终将成为版本化存储桶,但新对象,覆盖和删除的版本控制行为是不同的。
从API文档中,您引用的页面:
由于在存储桶上启用了版本控制,因此Amazon S3不会删除该对象。相反,它会为此对象添加删除标记。响应表明添加了删除标记(响应中的DeleteMarker元素为true)以及它添加的删除标记的版本号。
获取该信息,然后将版本控制暂停时必须遵循的行为添加到其中。删除标记的版本号为null,因为这是删除标记在版本控制暂停存储区中的工作方式。删除标记替换对象的null
版本(如果存在),并假定其身份为null
。
http://docs.aws.amazon.com/AmazonS3/latest/dev/DeletingObjectsfromVersioningSuspendedBuckets.html
如果它不是对象的null版本,那么你的删除操作可能实际上并没有删除所需的对象。该对象似乎只会被删除。
API响应似乎是正确的。