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

问题描述 投票:5回答:3

我使用开发人员工具包为节点上传图像到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
3个回答
7
投票

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

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

folder1/folder2/foo.txt

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

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

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


0
投票

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

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.