首页 > 解决方案 > 在 Blazor 网站上显示存储在私有 S3 存储桶中的图像

问题描述

我有不断输入私有 S3 存储桶的图像,然后我需要在 Blazor 应用程序中显示这些图像。

我根据指南中的说明设置了一个基于 VPC 的访问点和一个 VPC 终端节点。目的是只要代码是从 VPC 内执行的,这将允许我自由访问我的 S3 存储桶的内容。

我正在尝试在一个简单的 img 标签中显示图像:

<img src="https://my-access-point-12345678910.s3-accesspoint.us-east-1.amazonaws.com/img/image1.jpg">

我现在遇到的问题是,每次我尝试访问 url,无论是在网站上作为图像嵌入还是通过浏览器访问它时,都会遇到错误消息:

<Code>InvalidRequest</Code>
<Message>The authorization mechanism you have provided is not supported. Please use Signature Version 4.</Message>

根据有关签名版本 4 的 AWS 文档,我需要使用签名密钥发出 HTTP 请求以获取所需的图像。这是不可行的,因为我需要的图像数量太大,并且逐个执行 GET 请求将太慢。

我也尝试过创建一个完全公共的接入点,但遇到了同样的问题

我将如何解决这个问题,或者我缺少什么?

标签: .netamazon-web-servicesamazon-s3blazor

解决方案


正常的方法是:

  • 将图像存储在 Amazon S3 存储桶中
  • 保持存储桶私有——即不添加存储桶策略
  • 不要存储桶限制为只能通过接入点访问(不确定您是否这样做)
  • 当您的应用程序确定允许用户访问私有对象时,生成一个Amazon S3 预签名 URL,这是一个提供对私有对象的临时访问的限时 URL
  • 在图像标签中使用该预签名 URL,例如<img src="pre-signed-url-here">

这样,最终用户将能够通过预签名 URL 从 S3 访问图像。


推荐阅读