React Native - загрузить изображение в хранилище Firebase - PullRequest
2 голосов
/ 10 ноября 2019

Сначала я создаю файл BLOB-объекта

  RNFetchBlob.fs.readFile(localImgUrl2, 'base64')
    .then(base64ImageStr => Blob.build('image.png', base64ImageStr, { type: 'image/png;BASE64' }))

......, затем я пытаюсь загрузить в firebase

    .then((data) => {FBStorageRef.put(data, { contentType: mime })})

... но это выдает мне ошибку

Firebase Storage: Object 'profilePics/image.png' does not exist

Я считаю, что мое FBStorageRef говорит о том, что у него есть говядина с ..... мое облачное хранилище полностью пусто, и я хочу создать папку с именем profilePics ....... ифайл внутри, который я хочу вызвать image.png

const FBStorageRef = Firebase.storage().ref('/profilePics/image.png');

Он говорит, что profilePics/image.png doe not exist, что достаточно верно ....., но именно поэтому я хочу загрузить его правильно:)

Ответы [ 2 ]

1 голос
/ 14 ноября 2019
  1. Если путь к файлу выглядит как file:///.... Вы можете просто поместить его в функцию Firebase, не нужно выполнять шаг readFile.

Мой код до сих пор работает правильно:


  static uploadProfileAvatar(userID, fileURI) { // file URI is a path of a local image
    const updateTime = moment().unix();
    const storagePath = `${PROFILE_AVATAR_PATH}/${userID}_${updateTime}.jpg`;
    const fileMetaData = { contentType: 'image/jpeg' };
    return FirebaseStorage.uploadFile(fileURI, storagePath, fileMetaData);
  }

  static uploadFile(fileURI, storagePath, fileMetaData = null) {
    const uploadTask = firebase.storage().ref().child(storagePath).put(fileURI, fileMetaData);
    return uploadTask;
  }
Если у вас есть путь как rct-image-store://0. Вы должны написать это и затем получить изображение локального пути. После этого загрузите локальное изображение как регистр 1
  ImageStore.getBase64ForTag(
    rctFileURI, // rct-image-store: path
    (base64Image) => {
      const imagePath = `${RNFS.DocumentDirectoryPath}/${new Date().getTime()}.jpg`;
      RNFS.writeFile(imagePath, `${base64Image}`, 'base64')
      .then((success) => {
        // now your file path is imagePath (which is a real path)
        if (success) {
          // upload with imagePath, same as the 1
        }
      })
      .catch(() => {});
    },
    () => {},
  );
0 голосов
/ 14 ноября 2019

Используйте RNFirebase для обработки загрузки и выгрузки хранилища firebase. проверьте ссылку ниже для более подробной информации об установке. https://github.com/invertase/react-native-firebase/tree/master/packages/storage

, затем загрузите файл, используя следующий код

 import firebase from 'react-native-firebase';

  export const uploadMediaUri = (uri, path) => {

    return new Promise((resolve, reject) => {
        firebase.storage()
            .ref(path)
            .putFile(uri)
            .then(() => {
                resolve()
            })
            .catch(e => {
                reject(e)
            });
    })
}

Здесь uri - локальный путь к файлу, который вы хотите загрузить, а path - путь загрузки в Firebase. хранение

...