.net - 在 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 请求将太慢。
我也尝试过创建一个完全公共的接入点,但遇到了同样的问题
我将如何解决这个问题,或者我缺少什么?
解决方案
正常的方法是:
- 将图像存储在 Amazon S3 存储桶中
- 保持存储桶私有——即不添加存储桶策略
- 不要将存储桶限制为只能通过接入点访问(不确定您是否这样做)
- 当您的应用程序确定允许用户访问私有对象时,生成一个Amazon S3 预签名 URL,这是一个提供对私有对象的临时访问的限时 URL
- 在图像标签中使用该预签名 URL,例如
<img src="pre-signed-url-here">
这样,最终用户将能够通过预签名 URL 从 S3 访问图像。
推荐阅读
- python - 根据列标题添加新行
- f# - Xamarin Android:资源未拾取 F# 图标
- r - dimnames(s$v) <- list(colnames(x), paste0("PC", j)) 中的错误:dimnames 2 的错误长度不等于数组范围
- asp.net-core - asp.net核心部署持久错误代码='0x80004005:8000808c。在赢 2012r2
- azure - 逻辑应用性能是否取决于连接器?
- c# - 我可以创建一个指针来从任何来源轮询浮点数吗?
- asp.net-mvc - 从另一个控制器调用一个控制器的视图
- python - 有没有办法将字符串中的 ?: 运算符转换为 python 条件语句?
- javascript - 将外部 JS 文件链接到 Prestashop
- c# - 如何将结构数组从 C++ dll 返回到 C#