我收到的URL像那些从后端:
"https://s3.servauto.fr/compression-img/a5d6898a-382c-11ee-bbb5-00155dc60818.webp"
这不是确切的网址,这只是一个例子,但我只改变了域名。我得到这个如果试图从浏览器访问URL:
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied.</Message>
<Key>a5d6898a-382c-11ee-bbb5-
00155dc60818.webp</Key>
<BucketName>compression-
img</BucketName>
<Resource>/compression-img/a5d6898a-
382c-11ee-bbb5-
00155dc60818.webp</Resource>
<RequestId>178EEB9E92B1E64A
</RequestId>
<HostId>4796f121e6ce1a5f5c2
b8cb9130e56d2 75cde7e1bd216cac28e89f
450d374bd1</HostId>
</Error>
我得到了这些信息:
- AccessKey
- SecretKey
- AWS区域
- 服务名称
但我真的不明白我应该做什么来获取图像
我在一些资源中发现我应该使用aws-amplify。但在文章中,他们正在做另一件事:比如身份验证、登录或上传照片。我还发现我可以使用aws-sdk。但我真的不知道该怎么办。请考虑到我对这个主题不熟悉,所以我不能真正尝试一些东西。我不是在寻找一个现成的解决方案,而是只想知道我应该做什么,就像步骤或有人向我解释。关于这个主题没有足够的资源。
2条答案
按热度按时间of1yzvn41#
答案是肯定的
您可以从React前端访问您的图像。Here is and example using AWS SDK
答案是否定的
如果您的公司没有配置公共访问,可能是因为您的图像不应该公开。在这种情况下,您所拥有的所有信息(密钥,服务名称等)必须从后端(使用SDK)使用。您的后端将公开和端点(例如REST API)。此端点将使用AWS SDK检索图像并在响应中发送。您的React前端将调用此端点来检索图像。Here is an example with NodeJS
zxlwwiss2#
我建议使用aws-amplify,就像你在文档中找到的那样。
特别是要只配置S3部分,你会有一个像这样的
aws-exports.js
文件:然后在App.js文件中包含
Amplify.configure(awsConfig);
语句一旦你配置了它,你就可以为你的图像获取一个签名的URL并将其显示给用户:
这里提到的
imageKey
只是S3存储桶中的项目的路径,例如profile/users/johndoe.png
。您还将注意到,当您请求签名的url时,除非您另外指定,否则aws-amplify库将为
public/whatever/is/you/image/key/path
检索签名的url。因此,如果S3中的文件不限于登录用户,请考虑将它们存储在根public
文件夹中如果你不想在加载时有一个空白的图像,也可以考虑使用占位符
如果您没有使用公共文件夹,则必须手动设置S3存储桶上的访问规则。如果后端向您发送accessKey和secret,则访问可能已经设置。要在此时访问S3存储桶,您必须确保登录的“角色”与可以访问该文件夹的角色相同。当您使用cognito登录时,secret和accessKey会自动由amplify处理。据我所知,不建议手动发送他们自己,因为他们是临时反正