【问题标题】:Retrieve image from Amazon S3 private bucket using Node JS使用 Node JS 从 Amazon S3 私有存储桶中检索图像
【发布时间】:2021-07-15 07:53:06
【问题描述】:

我正在为我的一个网站使用 Node JS。根据网站的要求,我使用 Amazon S3 将图像存储在存储桶中。

我正在使用 API 使用访问密钥和 secretases 密钥在我的 Amazon S3 存储桶中动态上传图像。

但现在我想使用节点 JS 在网站中预览或显示那些上传的图像(不是一次全部)。请注意,S3 存储桶不是公开的。

谁能建议如何使用 Node JS 从 Amazon S3 检索图像? 尝试使用 getObject(),出现 403 禁止错误。文件成功上传到 S3 存储桶,读取文件时由于禁止错误而无法看到上传的文件。

这是我的代码

let fileNew = request.file;
        if (!fileNew) {
            response.status(200).json({ message: "Failure, please upload file", status: 400 });
        }
        const params = {
            Bucket: aws_s3_bucketName,
            Key: fileNew.originalname,
            Body: fileNew.buffer,
        };
        
        s3.upload(params, async function (err: any, data: any) {
            if (err) {
                return console.log("There was an error while uploading your file: ", err.message);
            }
            const fileInfo =data.Location;
            response.status(200).json({ message: "Success", data: fileInfo , status: 200 });
        });
        s3.getObject(params, function(err, data) {
            if (err){
                console.log(err, err.stack);
            }  
            else {
                console.log(data); 
            }              
    });

【问题讨论】:

  • 确保您使用的 iam 角色具有 s3:GetObject 权限
  • @AmanB,是的,有权限

标签: node.js typescript amazon-s3


【解决方案1】:

我假设上传和下载发生在不同的请求中。

在这种情况下: 如果您对 PUT 和 GET 使用完全相同的标识,那么它应该可以工作。如果您想允许 AWS 账户中的其他人访问对象,请在上传时添加 bucket-owner-full-control ACL

const params = {
  Bucket: aws_s3_bucketName,
  Key: fileNew.originalname,
  Body: fileNew.buffer,
  ACL: 'bucket-owner-full-control'
};

更多关于 ACL 的信息here

如果您想在文件上传后立即下载文件,请将下载块移动到上传函数的回调中。

【讨论】:

  • ,使用 ACL 更新,但我仍然收到 403 Forbidden 错误
  • 您能否确认这两项操作是否使用完全相同的凭据。添加您用于调用 API 的身份的 S3 存储桶策略和 IAM 权限策略。验证您的组织是否有任何 SCP。验证 IAM 身份是否具有任何角色边界。
  • 是的,我对这两个操作使用相同的凭据,我们的应用程序中有授权令牌策略。已添加 S3 存储桶策略和 IAM 权限。如果我将 S3 存储桶设为公开,它可以正常工作,没有任何问题,当我的存储桶设为私有时会遇到问题。
  • 我曾尝试使用亚马逊文档,但对我没有帮助。
猜你喜欢
  • 2018-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
  • 1970-01-01
  • 2018-01-14
相关资源
最近更新 更多