· 7 years ago · Jan 03, 2019, 07:38 AM
1/**
2 * Copyright (c) 2017-Present, Gaurav D. Sharma
3 * All rights reserved.
4 *
5 * @flow
6 */
7'use strict';
8
9import AWS from 'aws-sdk/dist/aws-sdk-react-native';
10import { RNS3 } from 'react-native-aws3';
11
12export default class AWSS3 {
13 /// data = { path: 'APP_FILE_PATH', mime: 'TYPE as image/video/pdf' }
14 /// customOptions = { bucket, accessKeyId, secretAccessKey, keyPrefix, fileName }
15 static upload(data, customOptions): Promise {
16 return new Promise((resolve, reject) => {
17 if (!customOptions.bucket && !customOptions.accessKeyId && !customOptions.secretAccessKey) {
18 reject(new Error('bucket/accessKeyId/secretAccessKey missing in customOptions'));
19 return;
20 }
21 const s3Options = {
22 bucket: null,
23 accessKeyId: null,
24 secretAccessKey: null,
25 region: 'us-east-1',
26 Expires: 158000000,
27 keyPrefix: '',
28 fileName: 'data',
29 acl: 'private',
30 successActionStatus: 201,
31 ...customOptions
32 };
33
34 AWS.config = {
35 accessKeyId: s3Options.accessKeyId,
36 secretAccessKey: s3Options.secretAccessKey,
37 region: s3Options.region
38 };
39 const s3Params = {
40 Bucket: s3Options.bucket,
41 Key: `${s3Options.keyPrefix}${s3Options.fileName}`,
42 Expires: s3Options.Expires
43 };
44 new AWS.S3().getSignedUrl('getObject', s3Params, (err, signedURL) => {
45 if (err) {
46 reject(err);
47 } else {
48 const RNS3file = { uri: data.path, name: s3Options.fileName, type: data.mime };
49 const RNS3Options = {
50 bucket: s3Options.bucket,
51 accessKey: s3Options.accessKeyId,
52 secretKey: s3Options.secretAccessKey,
53 region: s3Options.region,
54 keyPrefix: s3Options.keyPrefix,
55 acl: s3Options.acl,
56 successActionStatus: s3Options.successActionStatus
57 };
58 RNS3.put(RNS3file, RNS3Options)
59 .then(response => resolve({ signedURL, response }))
60 .catch(error => reject(error));
61 }
62 });
63 });
64 }
65}