如何在EXPO Native中将图像上载到Firebase中

问题描述 投票:1回答:1

我之前使用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是图片的网址。但是,我必须使用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)但是我不明白这一点。我该怎么办?让我知道如何解决〜谢谢,祝你好运。

javascript firebase react-native firebase-storage react-native-firebase
1个回答
0
投票

这里是我用来存储的代码段您需要检查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);
    });
  };

© www.soinside.com 2019 - 2024. All rights reserved.