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

使用Node JS从Amazon S3私有bucket检索图像

黄靖
2023-03-14

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

我使用API上传图像动态在我的亚马逊S3桶使用访问密钥和保密密钥。

但现在我想使用node JS在网站上预览或显示这些上传的图像(不是一次全部)。请注意,S3 bucket不是公共的。

有人能建议如何使用节点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); 
            }              
    });

共有1个答案

仲孙钊
2023-03-14

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

在这种情况下:如果对PUT和GET使用完全相同的标识,那么它应该可以工作。如果希望允许AWS帐户中的其他人访问对象,则在上载时添加bucket owner full controlACL

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

有关ACL的更多信息,请点击此处

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

 类似资料:
  • 问题内容: 我正在重构一些旧代码,包括重写基本的mysql查询以使用PDO。 以下内容在所有浏览器和所有图像类型中均能出色发挥作用: 不幸的是,但是我使用PDO重写了它,但是它不起作用。我已经遍历了整个PDO文档和标准的Web搜索,但是所有建议/解决方案都无效。 如何使用PDO轻松地从MySQL中获取图像并显示图像? 编辑1: 马修·拉兹洛夫(Matthew Ratzloff)在下面给出了明显的答

  • 我正在将文件从php上传到s3bucket.its上传成功,但当我检索图像时,我得到以下错误 如果我在上传文件时设置为公开,那么我可以检索它,但我想防止未经授权的用户。 上载文件代码 在问问题之前,我已经参考了许多网站,但它对我没有帮助 Amazon S3查看私人文件 PHP Amazon S3通过URL访问私人文件 如何通过Zend_Service_Amazon_S3访问Amazon s3私有桶

  • 问题内容: 节点和角度。我有一个MEAN堆栈身份验证应用程序,在其中按如下所述在成功登录时设置JWT令牌,并将其存储在控制器的会话中。通过服务拦截器将JWT令牌分配给config.headers: authservice.js Interceptor(省略了requestError,response和responseError): 现在我想从令牌中获取登录的用户详细信息,我该怎么做?我尝试如下,但

  • 节点和角度。我有一个平均堆栈身份验证应用程序,其中我在成功登录时设置JWT令牌,如下所示,并将其存储在控制器中的会话中。将JWT令牌分配给config。通过服务拦截器的标头: authservice.js拦截器(省略了请求错误、响应和响应错误): 现在我想从令牌中获取登录用户的详细信息,我该怎么做?我尝试了如下,但没有成功。当我记录来自用户的错误时。js文件它说“ReferenceError:未定

  • 我目前正在使用JAK(KML的Java API)与Google Earth和定制的KML文件进行交互。我可以使用placemark p.getName()或point等工具获取/设置地名的名称、描述和坐标。getCoordinates();但我遇到的问题是获取图标所用图像的url。例如,如果我的kml文件中有这个placemark(包含在文档中,然后是整个kml标记): 我怎样才能抓住那个png