【问题标题】:Amazon S3 serving file only to app user in react-nativeAmazon S3 仅向 react-native 中的应用程序用户提供文件
【发布时间】:2018-04-04 00:11:04
【问题描述】:

我正在 react-native / nodejs 中构建一个社交网络,并使用 S3 amazon 服务来处理用户的个人照片(上传、服务)

但我似乎不知道如何提供这些图像,我的问题是如何将这些上传的图像只提供给应用程序用户而不是全世界?

一开始我尝试自己显式获取图像,这样我就可以直接放入 S3 凭据,但似乎不太实用。

有没有办法让授权从我的存储桶中获取的应用发出的每个 GET 调用?

【问题讨论】:

    标签: javascript react-native amazon-s3 fetch aws-sdk-js


    【解决方案1】:

    您需要的是 S3 签名 URL http://docs.aws.amazon.com/AmazonS3/latest/dev/ShareObjectPreSignedURL.html

    不要获取图像,而是为这些图像创建唯一的签名 URL(具有自定义到期时间,例如 1 周)并将其传递给您的应用程序。这样您就可以关闭您的 S3 存储桶,但您的应用程序将能够通过这些私有链接获取图像。

    【讨论】:

    • 我设法让它工作了,非常感谢,还有一个问题,因为每次我循环遍历一组用户时,我都会在 1 周内创建 n 次签名的 url,当我再次循环时,我会重新- 每次都做这个过程,我如何确保使用相同的链接,除非它已过期?我每次都必须缓存并验证它的存在吗?
    • 你找到缓存的部分了吗?您接受的答案似乎仍然每次都生成新的网址
    【解决方案2】:

    感谢@sergey,我使用“getSignedUrl”方法满足了我的需求。

    这是对我有用的代码:

    import AWS from 'aws-sdk/dist/aws-sdk-react-native';
    const credentials = new AWS.Crendentials({ accessKeyId: '', secretAccessKey: ''})
    const s3 = new AWS.S3({ credentials, signatureVersion: 'v4', region: ''});
    // and there it is.
    const url = s3.getSignedUrl('getObject', { Bucket: 'your bucket name', Key: 'the filename'}).
    

    现在,每次我循环遍历包含对我的照片的多个引用的数组时,在每个循环期间,我都会为一个项目创建一个预先签名的 url,并将其放入我的组件中。

    【讨论】:

      【解决方案3】:

      您可以使用新的 AWS Amplify 库来完成此操作:https://github.com/aws/aws-amplify

      有一个 Auth 用于获取用户凭据和建立身份,无论是在 Authenticated 还是 UnAuthenticated 状态,还有一个 Storage 组件具有公共和私人访问配置文件。

      通过 npm 安装:

      npm install --save aws-amplify-react-native
      

      如果使用 Cognito 用户池,您需要链接项目:

      react-native link amazon-cognito-identity-js
      

      更多信息在这里:https://github.com/aws/aws-amplify/blob/master/media/quick_start.md#react-native-development

      然后拉入模块:

      import Amplify, {Auth, Storage} from 'aws-amplify-react-native'
      Amplify.configure('your_config_file');
      Storage.configure({level: 'private'});
      Storage.get('myfile');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-30
        • 1970-01-01
        • 1970-01-01
        • 2011-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-07
        相关资源
        最近更新 更多