Как загрузить изображение из телефона в хранилище Firebase? - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь загрузить изображение из моего телефона в Firebase с помощью Expo.Я получаю URI из картинки, но не знаю, как конвертировать его, чтобы я мог загрузить его в Firebase?

  _pickImage = async () => {
    let result = await ImagePicker.launchImageLibraryAsync({
      allowsEditing: true,
      aspect: [4, 3],
    });

    if (!result.cancelled) {
      console.log('device URL: w',result.uri);
      this.setState({ image: result.uri });
      this.uploadImage(result.uri).then(resp =>{
        alert('success')
      }).catch(err=>{
        console.log(err)
      })
    }
  };

Когда я регистрирую result.uri, я получаю:

файл: /// var / mobile / Containers / Data / Application / 1E5612D6-ECDB-44F4-9839-3717146FBD3E / Библиотека / Кэши / ExponentExperienceData /% 2540anonymous% 252FexpoApp-87f4a5f5-b117-462a-b147-cab242b0a916 / ImagePicker / 45FA4A7B-C172 *1015* B1

B2 * * * * * * * * 1012B * * * * * * B * * * * * * 391 * * * * B * * * * * * * * * * B * * * * * * * * * 211 * * * * * * * B * * * * * * * * B * * * * * * * * * * * * * * * * * 211 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Не удивительно.* Как я могу преобразовать его в формат, который работает для Firebase? *1014*

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Вам нужно преобразовать изображение в base64, вот пример использования rn-fetch-blob https://github.com/joltup/rn-fetch-blob

 export const picture = (uri, mime = 'application/octet-stream') => {
  //const mime = 'image/jpg';
  const { currentUser } = firebase.auth();  
  const Blob = RNFetchBlob.polyfill.Blob;
  const fs = RNFetchBlob.fs;
  window.XMLHttpRequest = RNFetchBlob.polyfill.XMLHttpRequest;
  window.Blob = Blob;

  return ((resolve, reject) => {
      const uploadUri = Platform.OS === 'ios' ? uri.replace('file://', '') : uri;
      let uploadBlob = null;
      const imageRef = firebase.storage().ref('your_ref').child('child_ref');
      fs.readFile(uploadUri, 'base64')
      .then((data) => {
        return Blob.build(data, { type: `${mime};BASE64` });
      })
      .then((blob) => {
        uploadBlob = blob;
        imageRef.put(blob._ref, blob, { contentType: mime });
      })
      .then(() => {
        //take the downloadUrl in case you want to downlaod
        imageRef.getDownloadURL().then(url => {
         // do something
        });
      });
  });
};
0 голосов
/ 14 декабря 2018

вы можете конвертировать изображение в base64, есть несколько библиотек, которые могут это сделать.

...