【问题标题】:Upload files to a specific folder in the bucket with AWS SDK使用 AWS 开发工具包将文件上传到存储桶中的特定文件夹
【发布时间】:2018-12-15 07:20:50
【问题描述】:

我正在使用 node 的开发人员工具包将图像上传到 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',
    };

这可行,但我怎样才能将图像上传到存储桶中的特定文件夹?

【问题讨论】:

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


    【解决方案1】:

    你可以把key写成FULL PATH

    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");
    
    

    【讨论】:

      【解决方案2】:

      AWS S3 没有文件夹结构。它显示为 S3 存储桶内的文件夹,但这是关键结构。 我在我的一项工作中使用了复制命令。在 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】:

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

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

        folder1/folder2/foo.txt
        

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

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

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

        【讨论】:

          【解决方案4】:

          实际上,我们没有 S3 中的文件夹对象以及所有关于键名的内容。当您将文件夹喜欢放在密钥名称中时,例如“folder/myfile.txt”,您可以在 S3 浏览器上将其视为文件夹。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-06-05
            • 1970-01-01
            • 1970-01-01
            • 2017-11-10
            • 1970-01-01
            • 1970-01-01
            • 2020-03-17
            • 2020-01-24
            相关资源
            最近更新 更多