使用AWS开发工具包将文件上传到存储桶中的特定文件夹

时间:2018-07-06 16:33:59

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

我正在使用针对节点的开发人员工具包将图像上传到AWS S3:

const aws = require('aws-sdk');

const s3Bucket = process.env.S3_BUCKET;
    const s3 = new aws.S3({
      signatureVersion: 'v4',
      region: process.env.S3_REGION,
      accessKeyId: process.env.S3_ACCESS_KEY_ID,
      secretAccessKey: process.env.S3_SECRET_ACCESS_KEY,
    });

    const s3Params = {
      Bucket: s3Bucket,
      Key: filename,
      Expires: 60,
      ContentType: filetype,
      ACL: 'public-read',
    };

这有效,但是如何使图像上传到存储桶中的特定文件夹?

4 个答案:

答案 0 :(得分:7)

Amazon S3是一个平面存储系统,实际上并未使用文件夹。

相反,键(文件名)包含对象的完整路径,例如:

folder1/folder2/foo.txt

Amazon S3管理控制台的确显示了文件夹中的存储桶内容,但它们是人为构造(称为通用前缀),以使我们的人们更容易理解。

因此,如果您要上传到特定的文件夹,只需在密钥中包含完整路径,它就会起作用(或更准确地说,假装可以起作用!!) >)。

有趣的事实:您可以复制到不存在的文件夹,并且该文件夹将为您“创建”。然后,如果删除对象,该文件夹将被“删除”,因为它实际上从未存在过!

答案 1 :(得分:0)

实际上,我们在S3中没有文件夹对象,而且没有键名。当在您的键名中输入likes文件夹时,例如“ folder / myfile.txt”,您可以在S3浏览器中看到该文件夹​​。

类似的问题: https://serverfault.com/questions/435827/what-is-the-difference-between-buckets-and-folders-in-amazon-s3

答案 2 :(得分:0)

AWS S3没有文件夹结构。它显示类似于S3存储桶中的文件夹,但这是Key结构。 我在一项工作中使用了copy命令。复制文件到S3存储桶文件夹中。

aws s3 cp myapp.zip s3:// $ S3_BUCKET_NAME / FolderName / FileName

示例

aws s3 cp myapp.zip s3:// $ S3_BUCKET_NAME / MyFolder / MyFileName

无需在AWS S3存储桶中创建任何文件夹,它将创建特定的文件夹(如果不存在)

上面的代码正在将myapp.zip文件复制到S3存储桶的MyFolder文件夹中,文件名为MyFileName

答案 3 :(得分:0)

您可以将密钥写为完整路径

const uploadToS3Bucket = (image, filePath) => {
  return new Promise((resolve, reject) => {
    let s3 = new AWS.S3({
      accessKeyId: process.env.S3_ACCESS_KEY,
      secretAccessKey: process.env.S3_SECRET_KEY,
      region: process.env.S3_REGION,
    });

    const bucketName = process.env.S3_BUCKET_NAME;

    let bucketPath = filePath;

    let params = {
      Bucket: bucketName,
      Key: bucketPath,
      Body: image,
    };
    s3.putObject(params, function (err, data) {
      if (err) {
        console.log(err);
      } else {
        resolve();
      }
    });
  });
};
await uploadToS3Bucket(imageFile,"folder1/folder2/image1.png");

相关问题