Переименуйте изображение перед загрузкой в ​​aws s3, используя реагировать родной - PullRequest
0 голосов
/ 08 февраля 2019

Я новичок в React Native.Я хочу переименовать файл перед загрузкой в ​​кнопку Amazon s3.Я могу загружать изображения, но я не понимаю, как их переименовать, прежде чем загружать с помощью реагировать на родную, и в настоящее время я загружаю изображения после их получения.Но я хочу загрузить их один раз после нажатия на кнопку отправить.Как я могу это сделать.

Как я могу это сделать?Кто-нибудь может помочь мне сделать это.

Мой код,

import React, {Component} from 'react';
import {Platform, StyleSheet,Alert, Text,TouchableOpacity, View} from 'react-native';
import { Dropdown } from 'react-native-material-dropdown';
import ImagePicker from 'react-native-image-picker';
import DeviceInfo from 'react-native-device-info';
import { RNS3 } from 'react-native-aws3';

export default class App extends Component<Props> {

      static navigationOptions = {
          title: 'Check In',
      };
       constructor(props) {
        super(props);
        this.state = {
          deviceId: '',
          isCameraVisiable: false,
          latitude: null,
          longitude: null,
          error: null,
          serverTime: null,
          file :'',
          saveImages : []
        }
      }

      handleSubmit(){
          var date = new Date();
          var time = date.getTime();
          console.log(time);
          // var data = {}
          // data['time'] = time;
           Alert.alert('You cliked on send!');
      }

      getServerTime() {
        fetch('http://worldclockapi.com/api/json/utc/now')
          .then((response) => response.json())
          .then((responseJson) => {
              if (responseJson) {
                  this.setState({
                      serverTime: responseJson
                  })
              }
              console.log(responseJson);
          })
          .catch((error) => {
              console.error(error);
          });
      }

    componentDidMount() {
        navigator.geolocation.getCurrentPosition(
            (position) => {
                this.setState({
                    latitude: position.coords.latitude,
                    longitude: position.coords.longitude,
                    error: null,
                });
            },
            (error) => this.setState({ error: error.message }),
            { enableHighAccuracy: true, timeout: 20000 },
        );
        console.log(this.state.longitude);
        console.log(this.state.error);
      }

  takePic(){
    ImagePicker.launchCamera({},(responce)=>{
      console.log(responce);
      const file ={
        uri : responce.uri,
        name : responce.fileName;
        //name : responce.fileName.replace(responce.fileName,'new_image_name.png');
        method: 'POST',
        path : responce.path,
        type :  responce.type,
        notification: {
            enabled: true
          }
      }

      this.state.saveImages.push(file.name);
      //this.state.saveImages.push(file);
      console.log('=============********************================');
      console.log(this.state.saveImages);


      const config ={
          keyPrefix :'uploads/',
          bucket : '****',
          region :'****',
          accessKey:'****',
          secretKey :'*****',
          successActionStatus :201
        }

      RNS3.put(saveImages ,config)
        .then((responce) => {
          console.log(responce);
        });
    })
  }
    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.handleSubmit}>
            <Text>Send</Text>
          </TouchableOpacity>
        </View>
        <View>
           <Text>Latitude: {this.state.latitude}</Text>
           <Text>Longitude: {this.state.longitude}</Text>
           <Text>DeviceUniqueId: {DeviceInfo.getUniqueID()}</Text>
           {this.state.error ? <Text>Error: {this.state.error}</Text> : null}
        </View>
      </View>
    );
  }
}
const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#F5FCFF',
  },
  welcome: {
    fontSize: 20,
    textAlign: 'center',
    margin: 10,
  },
  instructions: {
    textAlign: 'center',
    color: '#333333',
    marginBottom: 5,
  },
  Dropdown :{

  },
  Camera :{
    justifyContent: 'center',
    alignItems: 'center',
    marginTop : 20,
    backgroundColor : '#48a4ff',
    alignItems : 'center',
    padding : 1,
    borderWidth : 1,
    borderColor : '#48a4ff',
  },
  Send :{
    justifyContent: 'center',
    alignItems: 'center',
    marginTop : 20,
    backgroundColor : '#48a4ff',
    alignItems : 'center',
    padding : 3,
    borderWidth : 1,
    borderColor : '#48a4ff',
  }
});

1 Ответ

0 голосов
/ 18 марта 2019

Я могу сделать это простым способом.Я просто изменил имя в переменной имени файла.В устройстве он принимает случайное имя.Но после загрузки на s3, то есть в AWS s3, он получает имя

const file ={
        name://write the name which you want to give EX = name: 'flower.jpg',
       }
...