问题描述
在第一次删除操作之后,我必须删除具有DeleteMarker的S3版本对象:
{ DeleteMarker: true,VersionId: 'TxxQ.AtCmKflgRz6xTeBVYdOeTTLKUt' }
因此,如文档here
中所建议我尝试删除指定删除标记版本ID的对象,但随后又收到如上所述的另一个响应:
{ DeleteMarker: true,VersionId: 'TxxQ.AtCmKflgRz6xTeBVYdOeTTLKUt' }
整个代码如下:
var s3 = self.s3Store.GetInstance();
var params = {
Bucket: options.Bucket,Key: documentKey
};
if (self.logger) self.logger.info("S3Dataset delete bucket:%s key:%s",options.Bucket,documentKey);
s3.deleteObject(params,function (error,data) {
if (error) {
if (self.logger) self.logger.error("S3Dataset delete error key:%s error:%@",documentKey,error);
return callback(error);
}
else if (!Util.empty(data) &&
!Util.empty(data) &&
data.DeleteMarker &&
!Util.empty(data.VersionId)) { // object version to delete
var VersionId = data.VersionId;
// The bucket is versioned - https://docs.aws.amazon.com/AmazonS3/latest/dev/DeleteMarker.html
// { "DeleteMarker": true,"VersionId": "azW0.aiZyTSQzjwFe0YkIkGyL.JXJK8y" }
if (self.logger) self.logger.info("S3Dataset delete key:%s version:%@",VersionId);
var params = {
Bucket: options.Bucket,Key: documentKey,VersionId: VersionId
};
s3.deleteObject(params,data) {
if (error) {
if (self.logger) self.logger.error("S3Dataset delete error key:%s error:%@",error);
return callback(error);
} else {
return callback(null,data);
}
});
}
else {
var error = new Error('delete error');
if (self.logger) self.logger.error("S3Dataset delete error key:%s error:%@",error);
return callback(error);
}
结果是另一个VersionId
响应:
{
"DeleteMarker": true,"VersionId": "TxxQ.AtCmKflgRz6xTeBVYdOeTTLKUt"
}
因此,尽管对该对象使用了VersionID
删除,但似乎并没有发生实际删除。
如果我在Python
做同样的事情
import boto3
BUCKET = 'my_buckt'
key = 'my_bucket_key'
s3 = boto3.client('s3')
s3.delete_object(Bucket=BUCKET,Key=key)
它有效(删除了文件),没有任何版本支持。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)