代码之家  ›  专栏  ›  技术社区  ›  MaieonBrix

Amazon S3仅向react native中的应用程序用户提供文件

  •  1
  • MaieonBrix  · 技术社区  · 6 年前

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

    但我似乎不知道如何为这些图片提供服务,我的问题是,如何为应用程序用户而不是整个世界提供这些上传的图片?

    起初,我试图自己显式地获取图像,这允许我直接放置S3凭据,但这似乎并不实用。

    有没有一种方法可以让授权从我的bucket中提取的应用程序发出每个GET调用?

    3 回复  |  直到 6 年前
        1
  •  4
  •   Sergey Kovalev    6 年前

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

    不要获取图像,而是创建指向此图像的唯一签名URL(具有自定义过期时间,例如1周),并将其传递给应用程序。通过这种方式,您可以将S3存储桶与外界联系起来,但您的应用程序将能够获得具有这些私有链接的图像。

        2
  •  2
  •   MaieonBrix    6 年前

    多亏了@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
  •  0
  •   Richard    6 年前

    您可以使用新的AWS放大库来实现这一点: https://github.com/aws/aws-amplify

    Auth 用于获取用户凭据和建立身份,包括身份验证和未验证状态,以及 Storage 具有公共和私有访问配置文件的组件。

    通过npm安装:

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

    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');