S3通过Bucket / Folders / Files迭代

时间:2016-03-03 22:41:42

标签: node.js amazon-s3

我正在使用s3.listObjects迭代S3存储桶,但我收到此错误:{[UnexpectedParameter:在params中找到意外的键'Key'] 以下是我使用的代码:     exports.handler = function(event,context){

var bucket = event.Records[0].s3.bucket.name;
var key = event.Records[0].s3.object.key;
var params = {
    Bucket: bucket,
    Key: key
};

console.log('bucket name ', bucket);
s3.getObject(params, function(err, data) {
    if (err) {
        console.log(err);

    } else {
        context.succeed(data.ContentType);
    }
});

s3.listObjects(params, function(err, data) {
    if (err) return console.log(err);

    params = {Bucket: 'bucketName'};

});
};

任何人都可以建议我在这里做错了什么? 感谢

2 个答案:

答案 0 :(得分:5)

列表对象不会将密钥作为参数,因为它希望列出存储桶中的所有密钥。真的只是在找你告诉它哪个桶列出了内容。此外,它还需要一些其他参数来帮助过滤结果和最多返回的对象。

AWS.S3.listObjects Docs

// Acceptable Parameters as taken from the AWS.S3.listObjects Docs
var params = {
  Bucket: 'STRING_VALUE', /* required */
  Delimiter: 'STRING_VALUE',
  EncodingType: 'url',
  Marker: 'STRING_VALUE',
  MaxKeys: 0,
  Prefix: 'STRING_VALUE'
};

基本上,API正在向您传达您传递的不必要参数。

var params = { Bucket: bucket };
s3.listObjects(params, function(err, data) {
  if (err) return console.error(err);

  // data.Contents is the array of objects within the bucket
  console.log(data.Contents);
  return; 
});

答案 1 :(得分:0)

如果a是您的存储桶,并且图像位于a/b/c文件夹下。然后就用 存储桶名称为“ a”,并使用图片键添加路径。

否则,只需转到您的AWS服务并找到您的图像密钥即可。

在我的情况下,图像位于ctr/images/serviceImage下。

var params = {

  Bucket: "ctr",//bucket name
  Delete: {
    Objects: [
      {
        Key: "images/ServiceImage/01c99e0c-f21e-4860-bf01-e7c79274b0ae.jpg"
      },
      {
        Key: "imgs/ServiceImage/0390cdf2-1989-43cd-8c93-77510dcd597e.jpg"
      }
    ],

    Quiet: false
  }

};