为什么当指定的key不存在时S3.deleteObject不会失败?

问题描述 投票:0回答:1

使用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)
})
javascript node.js amazon-web-services rest aws-sdk
1个回答
29
投票

因为这就是规格所说的应该做的。

deleteObject(params = {}, 回调) ⇒ AWS.Request

删除对象的空版本(如果有)并插入 删除标记,这将成为该对象的最新版本。如果 不存在空版本,Amazon S3 不会删除任何对象。

因此,如果该对象不存在,则调用

deleteObject
时仍然不会出错,并且如果启用了版本控制,即使之前没有任何可删除的内容,它也会添加删除标记。

© www.soinside.com 2019 - 2024. All rights reserved.