使用AWS SDK将文件上载到存储桶中的特定文件夹

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用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',
    };

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

答案

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

而是,Key(filename)包括对象的完整路径,例如:

folder1/folder2/foo.txt

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

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

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

另一答案

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

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

另一答案

AWS S3没有文件夹结构。它显示了S3桶中的文件夹,但这是Key结构。我在我的一份工作中使用了复制命令。复制S3 bucket文件夹中的文件。

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文件 - 文件名为MyFileName的S3存储桶的MyFolder

以上是关于使用AWS SDK将文件上载到存储桶中的特定文件夹的主要内容,如果未能解决你的问题,请参考以下文章

如何使用angular js将aws s3文件复制到同一个存储桶中的特定文件夹

如何使用aws java sdk将文件从S3存储桶从一个区域复制到另一个区域?

AWS:将 IAM 用户限制在 S3 存储桶中的特定文件夹

在iOS Swift中不使用AWS SDK在Amazon S3存储桶中上传的背景图像(背景模式)

AWS S3 SDK:如何从多文件上载中的进度回调中获取文件名?

如何强制删除 S3 存储桶中的所有对象版本,然后最终使用 aws-sdk-go 删除整个存储桶?