使用AWS SDK for Node,为什么我在尝试删除不存在的对象时没有收到错误(即 S3 密钥错误)?
另一方面,如果我指定一个不存在的存储桶,则会产生错误。
如果考虑以下 Node 程序,
Key
参数列出了存储桶中不存在的键,但回调的 error
参数为 null
:
var aws = require('aws-sdk')
function getSetting(name) {
var value = process.env[name]
if (value == null) {
throw new Error('You must set the environment variable ' + name)
}
return value
}
var s3Client = new aws.S3({
accessKeyId: getSetting('AWSACCESSKEYID'),
secretAccessKey: getSetting('AWSSECRETACCESSKEY'),
region: getSetting('AWSREGION'),
params: {
Bucket: getSetting('S3BUCKET'),
},
})
picturePath = 'nothing/here'
s3Client.deleteObject({
Key: picturePath,
}, function (err, data) {
console.log('Delete object callback:', err)
})
因为这就是规格所说的应该做的。
deleteObject(params = {}, 回调) ⇒ AWS.Request
删除对象的空版本(如果有)并插入 删除标记,这将成为该对象的最新版本。如果 不存在空版本,Amazon S3 不会删除任何对象。
因此,如果该对象不存在,则调用
deleteObject
时仍然不会出错,并且如果启用了版本控制,即使之前没有任何可删除的内容,它也会添加删除标记。