Как загрузить изображение на FireBase в Экспо реагировать на родной - PullRequest
1 голос
/ 19 марта 2020

Я использовал RNFirebase, прежде чем загружать изображение в Firebase. В то время я использовал этот код:

firebase
        .storage()
              .ref()
              .child(`posts/${fileName}`)
              .putFile(postImage.uri)
              .then((value) => {
                console.log('Put file response :', value);

Здесь

let result = await ImagePicker.launchImageLibraryAsync({
      mediaTypes: ImagePicker.MediaTypeOptions.All,
      // allowsEditing: true,
      // aspect: [4, 3],
      quality: 1
    });

    console.log(result);

    if (!result.cancelled) {
      this.setState({ imageData: result });
    }



postImage  = result.uri

То есть postImage - это URL изображения. Однако я должен изменить код с помощью firebase и загрузить изображение в хранилище и базу данных firebase. Поэтому я использовал этот код:

firebase
        .storage()
              .ref()
              .child(`posts/${fileName}`)
              .put(postImage.uri)
              .then((value) => {
                console.log('Put file response :', value);

Но результат имеет ошибки на экране. На экране возвращается [object object]. enter image description here Итак, я посмотрел документы Firebase, и функция put должна иметь такие данные: put(data | blob) Но я не могу этого понять. Как я могу это сделать? Дайте мне знать, как это исправить ~ Спасибо и наилучшие пожелания.

1 Ответ

0 голосов
/ 19 марта 2020

Вот фрагмент кода, который я использовал для хранения. Вам нужно проверить код ImagePicker, т. Е. Путь к файлу в expo, который он используется в голом приложении-реактиве


  const [progress, setProgress] = useState(0);
  const [uploading, setUploading] = useState(false);

  const storageForDefaultApp = storage();

  const uploadImage = async image => {
    setUploading(true);
    setProgress(0);
    // console.log('image', image);
    const task = storageForDefaultApp.ref(image.ref).putFile(image.path);

    task.on('state_changed', snap => {
      setProgress(Math.round(snap.bytesTransferred / snap.totalBytes) * 10000);
    });

    try {
      const final = await task;
      console.log('final image', final);
    } catch (e) {
      console.error(e);
    }
    setUploading(false);
  };

  const _openPicker = () => {
    ImagePicker.openPicker({
      cropping: false,
      multiple: false,
      compressImageQuality: 0.8,
      mediaType: 'photo',
    }).then(image => {
      let timestamp = moment().format(TIMESTAMP_FORMAT);
      const final = {...image, id: timestamp, ref: timestamp + '.jpeg'};
      setFiles([...files, final]);
      uploadImage(final);
    });
  };

...