在react native app中从AWS S3中删除图像

cygmwpex  于 2023-10-22  发布在  React
关注(0)|答案(2)|浏览(166)

我收到的URL像那些从后端:

  1. "https://s3.servauto.fr/compression-img/a5d6898a-382c-11ee-bbb5-00155dc60818.webp"

这不是确切的网址,这只是一个例子,但我只改变了域名。我得到这个如果试图从浏览器访问URL:

  1. <Error>
  2. <Code>AccessDenied</Code>
  3. <Message>Access Denied.</Message>
  4. <Key>a5d6898a-382c-11ee-bbb5-
  5. 00155dc60818.webp</Key>
  6. <BucketName>compression-
  7. img</BucketName>
  8. <Resource>/compression-img/a5d6898a-
  9. 382c-11ee-bbb5-
  10. 00155dc60818.webp</Resource>
  11. <RequestId>178EEB9E92B1E64A
  12. </RequestId>
  13. <HostId>4796f121e6ce1a5f5c2
  14. b8cb9130e56d2 75cde7e1bd216cac28e89f
  15. 450d374bd1</HostId>
  16. </Error>

我得到了这些信息:

  • AccessKey
  • SecretKey
  • AWS区域
  • 服务名称

但我真的不明白我应该做什么来获取图像
我在一些资源中发现我应该使用aws-amplify。但在文章中,他们正在做另一件事:比如身份验证、登录或上传照片。我还发现我可以使用aws-sdk。但我真的不知道该怎么办。请考虑到我对这个主题不熟悉,所以我不能真正尝试一些东西。我不是在寻找一个现成的解决方案,而是只想知道我应该做什么,就像步骤或有人向我解释。关于这个主题没有足够的资源。

of1yzvn4

of1yzvn41#

  • 首先,您的图像是否公开,我的意思是每个人都可以访问它而无需认证?***
    答案是肯定的

您可以从React前端访问您的图像。Here is and example using AWS SDK

答案是否定的

如果您的公司没有配置公共访问,可能是因为您的图像不应该公开。在这种情况下,您所拥有的所有信息(密钥,服务名称等)必须从后端(使用SDK)使用。您的后端将公开和端点(例如REST API)。此端点将使用AWS SDK检索图像并在响应中发送。您的React前端将调用此端点来检索图像。Here is an example with NodeJS

zxlwwiss

zxlwwiss2#

我建议使用aws-amplify,就像你在文档中找到的那样。
特别是要只配置S3部分,你会有一个像这样的aws-exports.js文件:

  1. export const awsConfig = {
  2. Storage: {
  3. AWSS3: {
  4. bucket: 'bucket-name', // (required) - Amazon S3 bucket name
  5. region: 'eu-central-1' // (optional) - Amazon service region
  6. }
  7. }
  8. }

然后在App.js文件中包含Amplify.configure(awsConfig);语句
一旦你配置了它,你就可以为你的图像获取一个签名的URL并将其显示给用户:

  1. import { Storage } from 'aws-amplify';
  2. function RandomView() {
  3. const [imageUrl, setImageUrl] = useState();
  4. React.useEffect(() => {
  5. setImageUrl(undefined);
  6. Storage.get(item.imageKey, { validateObjectExistence: true })
  7. .then(signedUrl => {
  8. setImageUrl(signedUrl);
  9. })
  10. .catch(console.error);
  11. }, [item]);
  12. return (
  13. <Image style={{ width: 64, height: 64, borderRadius: 7 }} source={{ uri: imageUrl }} />
  14. );

这里提到的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处理。据我所知,不建议手动发送他们自己,因为他们是临时反正

展开查看全部

相关问题