S3使用DeleteMarker删除版本化的对象

问题描述

在第一次删除操作之后,我必须删除具有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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...