当前位置: 首页 > 知识库问答 >
问题:

使用AWS SDK将文件上载到bucket中的特定文件夹

钱瑞
2023-03-14

我正在使用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',
    };

这是可行的,但我如何才能使图像上传到一个特定的文件夹中的桶?

共有3个答案

龙景澄
2023-03-14

AWS S3没有文件夹结构。它显示了S3 bucket中的文件夹,但这是关键结构。我在我的一个作品中使用了copy命令。正在复制S3 bucket文件夹中的文件。

AWS s3 cpmyapp.zips3://$S3_BUCKET_NAME/FolderName/FileName

示例

AWS s3 cpmyapp.zips3://$S3_BUCKET_NAME/MyFolder/MyFileName

无需在AWS S3 bucket中创建任何文件夹,如果不存在,则会创建特定文件夹

上面的代码是复制myapp.zip文件夹内的文件-S3存储桶的MyFolder,文件名为MyFileName

楚良平
2023-03-14

您可以将密钥写入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");

邢小云
2023-03-14

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

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

folder1/folder2/foo.txt

Amazon S3管理控制台确实显示文件夹中的bucket内容,但它们是一种人工构造(称为公共前缀),使我们更容易理解。

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

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

 类似资料:
  • 我正试图上传一个文件到我的谷歌硬盘,下面的代码工作。如何指定要上载到哪个文件夹,即驱动器--shared with me--csvFolder

  • Amazon s3配置文件 但如果无法上载文件并给出以下错误 错误:无法上载文件java.io.IOException:需要Ant GLOB模式,但看到'/var/lib/jenkins/jobs/narad-dev-clean/workspace/*_audit.csv'。有关语法,请参见http://ant.apache.org/manual/types/fileset.html:hudson

  • 我正在尝试将文件上传到s3存储桶中的文件夹中。我正在用PHP做以下工作: 桶名是发送到PHP的字符串,表示使用正斜杠的子文件夹: 然而,当我将一个新图像上传到我的bucket时,它会被上传到bucket root。如何将此文件上载到bucket中的子文件夹? 谢谢

  • 问题内容: 我正在尝试使用HttpClient下载PDF文件。我可以获取文件,但是我不确定如何将字节转换为PDF并将其存储在系统中的某个位置 我有以下代码,如何将其存储为PDF? 问题答案: 编辑: 您还可以使用BufferedOutputStream和BufferedInputStream来加快下载速度:

  • 我想使用PHP SDK将一个文件从外部URL直接上传到Amazon S3 bucket。我用以下代码实现了这一点: 其中,函数remote_filesize如下所示: 但是,如果我可以在上传到Amazon时跳过设置文件大小就好了,因为这可以节省我去自己服务器的行程。但是如果我删除$s3中的设置“长度”属性-

  • 在构建代码之后,我无法将构建工件上载到aws s3 bucket。 下面是我从jenkins那里得到的控制台输出片段。 错误:上传文件失败com.amazonaws.services.s3.model.Amazon S3异常:桶在这个区域:空。请使用此区域重试请求(服务:Amazon S3;状态代码:301;错误代码:PermanentReDirect;请求ID:EDD73B3CC84C0AF6)