Нужно ли конвертировать локальный URL-адрес изображения телефона в base64 перед отправкой на сервер для загрузки на S3 с помощью multer? - PullRequest
1 голос
/ 25 марта 2019

Вот URL, который я получаю из локального хранилища телефона

"file:///storage/emulated/0/Pictures/1548694153266.jpg"

Если мне действительно нужно преобразовать это в base64, чтобы загрузить в s3.Если да, то есть ли какая-нибудь хорошая библиотека для преобразования локального URL-адреса из реагирующего нативного в base64

, почему так важно преобразовать его в base64?

Как лучше всего это сделать?,

Я могу легко отправлять изображения с локального компьютера через почтальона.из почтальона я могу выбрать изображение непосредственно с компьютера в качестве объекта изображения.но в этом случае URL не является объектом изображения?

exports.uploadProduct = async (req, res) => {

      const uploads = await uploadMulti();

      uploads(req, res, function (err) {
            let imageFiles = req.files;
            const productImages = new Array();
            for (var i = 0; i < imageFiles.length; i++) {
                  fileLocation = imageFiles[i].location;
                  productImages.push(fileLocation)
            }
            console.log(productImages);
      })
}; 

Ответы [ 2 ]

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

Это можно сделать с помощью следующих шагов:

Шаг 1: Установите этот пакет, чтобы преобразовать его URL-адрес файла в base64.Вот ссылка на хорошую библиотеку для преобразования локального URL-адреса из реагирующего нативного в base64

Шаг 2: Затем в вашем коде

import ImgToBase64 from 'react-native-image-base64';

Шаг 3: Создайте функцию для преобразования вашего изображения в base64

_convertImageToBaseSixFour() { 

    ImgToBase64.getBase64String('YOUR_IMAGE_PATH') // path to your image from local storage
  .then((base64String) => {
        // Do your stuff with base64String
        })
  .catch(err => Alert.alert('Error' + err));

}

Шаг 4 : вызовите эту функцию нажатием кнопки.Вы можете сделать это соответствующим образом.

// *** BUTTON *** //

     <View style={styles.buttonContainer}>
           <Button onPress={this._convertImageToBaseSixFour} title="Change to Base" color="#FFFFFF" accessibilityLabel="Tap"/> //Call on press
     </View>

// *** STYLESHEET for Button *** //

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#FFFFFF'
  },
  buttonContainer: {
    backgroundColor: '#2E9298',
    borderRadius: 10,
    padding: 10,
    shadowColor: '#000000',
    shadowOffset: {
      width: 0,
      height: 3
    },
    shadowRadius: 10,
    shadowOpacity: 0.25
  }
})

Здесь вы можете найти , почему важно преобразовать это в base64

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

Я использую response-native-image-picker эта библиотека предоставляет вам как строку base64, так и локальный URL, который зависит от вас, какой подход лучше для вас.

const options = {
  title: 'Select Avatar',
  storageOptions: {
    skipBackup: true,
    path: 'images'
  },
  mediaType: 'photo',
  quality: 0.01
}
const pickImage = onUri => {
  ImagePicker.showImagePicker(options, response => {


    let fileName = response.fileName
    if (
      Platform.OS === 'ios' &&
      (fileName.endsWith('.heic') || fileName.endsWith('.HEIC'))
    ) {
      fileName = `${fileName.split('.')[0]}.JPG`
    }
    let source = { uri: response.uri, fileName }

    const file = {
      uri: response.uri,
      name: response.fileName,
      type: 'image/jpeg'
    }

    console.log('File Object ', file)

    // var source = { uri: 'data:image/jpeg;base64,' + response.data, isStatic: true };
    onUri(response.data, response.uri, response.type, fileName, file)
  })

}
...