Amazon S3仅为react-native中的app用户提供文件

时间:2017-10-23 12:31:33

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

我正在使用react-native / nodejs构建社交网络,并使用S3亚马逊服务处理用户的个人照片(上传,投放)

但我似乎无法理解如何为这些图像提供服务,我的问题是如何将这些上传的图像仅提供给应用程序用户而不是整个世界?

起初我尝试自己明确地获取图片,这让我可以直接输入S3凭据,但它看起来并不实用。

有没有办法让一个被授权从我的存储桶中取出的应用程序进行每次GET调用?

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

感谢@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。

答案 2 :(得分:0)

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

在Authenticated和UnAuthenticated状态下,有一个Auth用于获取用户凭据和建立身份,以及具有公共和私有访问配置文件的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');