React Native - как хранить захваченные изображения внутри приложения, а не хранить в галерее и загружать их в AWS s3 из самого приложения - PullRequest
0 голосов
/ 21 февраля 2019

Я новичок в реакции на родную.Я занимаюсь разработкой приложения, в котором я делаю фотографии с использованием реагирования на родные изображения и загружаю их на сервер AWS.Я могу сделать снимок и загрузить его в AWS s3. В настоящее время эти изображения хранятся в галерее.Но я хочу сохранить их только в моем приложении (его не следует хранить в галерее), а затем загрузить в AWS s3.Как я могу это сделать.Затем я могу загрузить снятые фотографии в AWS s3 только при наличии сетевого подключения.Поэтому я хочу хранить внутри приложения, и как только сетевое соединение вернется, они должны быть загружены в AWS s3 (как в приложении).Как я могу этого добиться.(Я не загружал код стилей здесь)

Мой код,

import React, {Component} from 'react';
    import {Platform, StyleSheet,Alert, Text,TouchableOpacity,     
    View,Picker,Animated,Easing,Image} from 'react-native';
    import ImagePicker from 'react-native-image-picker';
    import { RNS3 } from 'react-native-aws3';

     export default class SecondScreen extends Component<Props> {
            constructor(props) {
            super(props);
            this.state = {
              file :'',
              //declare array to store all taken images 
              saveImages : []
            }

          }
      takePic(){
        ImagePicker.launchCamera({},(responce)=>{
          const file ={
            uri : responce.uri,
            name :responce.fileName,,
            method: 'POST',
            path : responce.path,
            type :  responce.type,
            notification: {
                enabled: true
              }
          }
            this.state.saveImages.push(file);

        })
      }

   _upload=(saveImages)=>{
        const config ={
            keyPrefix :'uploads/',
            bucket : 's3merahkee',
            region :'us-east-2',
            accessKey:'***',
            secretKey :'***',
            successActionStatus :201
          }

          this.state.saveImages.map((image) => {
               RNS3.put(image,config)
              .then((responce) => {
                console.log(saveImages);
              });
          });
      }
        render() {

          return (
              <View style={styles.container}>
                    <View style={styles.Camera}>
                      <TouchableOpacity onPress={this.takePic.bind(this)}>
                        <Text>Take Picture</Text>
                      </TouchableOpacity>
                    </View>
                    <View style={styles.Send}>
                      <TouchableOpacity onPress={() => this._upload()}>
                        <Text>Send</Text>
                      </TouchableOpacity>
                    </View>
            </View>
          );
      }
    }

1 Ответ

0 голосов
/ 21 февраля 2019

Вы можете предоставить storageOptions.cameraRoll: false

  takePic(){
    ImagePicker.launchCamera({storageOptions.cameraRoll: false},(responce)=>{
      const file ={
        uri : responce.uri,
        name :responce.fileName,,
        method: 'POST',
        path : responce.path,
        type :  responce.type,
        notification: {
            enabled: true
          }
      }
        this.state.saveImages.push(file);

    })
  }

Взгляните на ссылку API для получения дополнительных опций.

Что касается временного хранилища, вы можетеиспользуйте AsyncStorage реактивного натива для хранения данных локального приложения.Сначала вам нужно будет преобразовать изображение в строку base64, поскольку AsyncStorage может хранить только строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...