繁体   English   中英

AWS NodeJs SDK 无法删除 object

[英]AWS NodeJs SDK cannot delete object

我正在尝试使用s3.deleteObject api 使用 Node.js 的aws-sdk删除我的 S3 存储桶上的 object:

async function deleteObjectAsync(bucket, key) {
    try {
        var extras = {
            Bucket: bucket,
            Key: key
        };
        const data = await s3
            .deleteObject(extras)
            .promise();
        return data;
    } catch (err) {
        console.log(err);
    }
}//deleteObjectAsync

像这样使用

(async (bucket, keys) => {
    for (const key of keys) {
        const result = await deleteObjectAsync(bucket, key);
        console.log(result);
    }
})(my_bucket, keys);

我得到 - 结果 - 一个DeleteMarker字段和一个VersionId

{ DeleteMarker: true, VersionId: '2wMteXstTAn6e.rsTS6wHVSerXuUMNLXw' }

但是 object 在 S3 存储桶上似乎没有被删除,而是标记为删除。

使用 Python api 时:

def delete_key(bucket, key):
    deleted = True
    try:
        s3 = boto3.client('s3')
        res = s3.delete_object(Bucket=bucket, Key=key)
    except Exception as e:
        print("deleted key:%s error:%s" % (key,e) )
        deleted = False
        pass
    return deleted

该文件被立即删除。 为什么?

versioned存储桶中成功删除 object 非常简单,但文档并不清楚应该how操作。

从上面您自己的示例中,您可以按照以下方式进行操作:

async function deleteObjectAsync(bucket, key) {
  try {
    const params = {
      Bucket: bucket,
      Key: key,
      VersionId: 'null'
    };

    return await s3.deleteObject(params).promise();
  } catch (err) {
    console.error(err);
  }
}

诀窍是在 object 还没有 VersionId 时将'null'字符串作为 VersionId 传递。 当它发生时,您必须删除所有以前的版本,然后删除'null'版本,即“原始版本”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM