AWS S3对象删除,Node.js

时间:2018-08-29 18:06:30

标签: node.js amazon-web-services amazon-s3

我有以下情况,我将图像存储在S3中,每个图像都在其自己的文件夹中,如下所示:

{ Deleted: [ { Key: '/1b37c7ad1d9f021e000813b9d16b8ae2b24e6ed6f3c4430bfb8196ca63eec57eafe5bf2ee8993a7846faca0c95cec587395d6639f2aeb73447fb9429b673f0ca/1535564545.jpg' } ],
Errors: [] }

我正在使用AWS开发工具包,我尝试了两种方法:

  • 传递完整路径
  • 仅传递my-app之后的路径

有了这两者,我都会得到如下响应:

{ 
    Bucket: 'my-app',
    Delete: { 
        Objects: [{
            Key: '/c506c3b842e1729c41542b7867b14a5eefb4159336105392ed99d250153aeea515e39986f850e3c8674d082b760b7e0d3ab5edf1c7c3e5d89ea7e71a399c0e5e/1535610612.jpg' 
        }] 
    } 
}

但是,如果我去检查一下我的存储桶,文件和文件夹都就位了,就找不到原因了,有什么建议吗?

我开始认为我应该跳过文件夹的创建,而是将图像添加到存储桶的根中。

[UPDATE] S3.deleteObjects方法的参数:

<input class="form-control" id="filename" type="text" name="filename" value="">

var formData = new FormData(document.getElementById('filename'));

我正在使用无服务器框架,在它的帮助下创建了存储桶-可能与此有关吗?构建此文件时,我唯一遇到的错误是,执行删除操作的lambda函数没有执行此操作的权限,一旦我添加了s3:DeleteObject,便对此表示欢迎。

1 个答案:

答案 0 :(得分:1)

这里的问题在于您指示S3存储桶和SDK密钥的方式。目前,它们的提供方式如下:

Bucket: https://s3.eu-central-9.amazonaws.com/my-app
Key: /1234.jpg

应按以下方式提供它们:

Bucket: my-app
Key: 1234.jpg

如果对象处于子文件夹结构中,则它将是:

Bucket: my-app
Key: folder1/folder2/1234.jpg

我认为部分问题是您提供的信息不正确,但是S3的响应正常。如果要求S3删除不存在的对象,它将返回OK。这是安全的事情。