【问题标题】:How to get AWS S3 signed URL with mongoDB Stitch?如何使用 mongoDB Stitch 获取 AWS S3 签名 URL?
【发布时间】:2018-10-26 22:47:48
【问题描述】:

我正在尝试从 S3 存储桶中检索一些文件,但这些文件已设置为私有文件。我目前正在使用 ListObjects 来检索我的存储桶中的所有文件,但在结果集中它不包含签名的 url,并且由于该文件是私有的,我无法在我的网站上显示它。

我正在使用 mongoDB Stitch 连接到我的 S3 存储桶。

这是我的代码,用于检索我的存储桶中的所有文件。

const aws = this.client.getServiceClient(AwsServiceClient.factory, "TESTAPP");
const args = {
   Bucket: bucketName,
   Prefix: folderName
};

const request = new AwsRequest.Builder()
   .withService('s3')
   .withAction('ListObjects')
   .withArgs(args);

aws.execute(request.build())
    .then(result => {
        console.log(result);
    }

当我查看 console.log 时,我可以看到所有文件信息,但我尝试访问该文件,因为它是一个私有文件,我收到一条错误消息,说我无权访问它。

我需要再次调用来获取签名的 url 还是可以一次获取所有的?

【问题讨论】:

  • 您能否粘贴确切的错误消息和您用于检索图像的代码?
  • 我收到 403 错误(禁止)。这些文件在存储桶中是私有的,我使用的 url 是 https://s3.amazonaws.com/{bucket}/{key} 键是我为结果变量获取的对象名称。

标签: amazon-s3 mongodb-stitch


【解决方案1】:

所以你有几个选择。

  1. 如果您要公开展示图片,只需在亚马逊上公开即可。如果您在亚马逊的权限中为这些图像关闭列表选项,那么人们将需要确切的 url 才能查看它,这样互联网上的随机人就不会浏览您的照片。因此,除非它实际上是敏感数据,否则此选项可能没问题。

  2. 您可以将 GetObject 方法与 Stitch sdk 一起使用。这将为您返回图像的 base64 版本。然后您可以将其转换为图像或将 base64 直接嵌入到您的 html 中 <img> 标记的 src 中,这看起来像

<img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUA
    AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
    9TXL0Y4OHwAAAABJRU5ErkJggg==" />
  1. 您可以使用您的 AccessKeyId 和 Signature 作为查询参数对 GET 请求进行签名。这个link 将向您展示如何创建签名。

【讨论】:

  • 谢谢你的帮助。
猜你喜欢
  • 1970-01-01
  • 2023-03-09
  • 2016-10-21
  • 2018-06-05
  • 2023-04-09
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
  • 2020-10-18
相关资源
最近更新 更多