【发布时间】:2021-07-29 02:18:30
【问题描述】:
我正在尝试使用 this s3.deleteObject api 删除我的 S3 存储桶上的对象,该对象带有 aws-sdk for Node.js:
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' }
但是对象在 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
文件被立即删除。为什么?
【问题讨论】:
-
您看到的行为正是其documentation page 中解释的行为。我不明白为什么它在 Python 中的工作方式不同;它的行为应该相同,因为它们使用相同的API endpoint。
-
@guzmonne 好点。事实上,我为版本化存储桶编写了一个删除对象,但它没有按预期工作 - gist.github.com/loretoparisi/0058675d13d1115e7b46b1b66433b327
-
如果改用
deleteObjects方法,行为会改变吗?
标签: node.js amazon-web-services amazon-s3 aws-sdk aws-sdk-js