javascript - 如何在expo React Native中将图像上传到firebase

标签 javascript firebase react-native firebase-storage react-native-firebase

我之前使用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(数据 | blob) 但我无法理解这一点。 我该怎么办? 告诉我怎么解决吧~ 谢谢并致以最美好的祝愿。

最佳答案

这是我用来存储的代码片段 您需要检查 ImagePicker 代码,即 expo 中文件的路径 它用于裸 react native 应用程序


  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);
    });
  };

关于javascript - 如何在expo React Native中将图像上传到firebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60753537/

相关文章:

javascript 不返回 false

android - 如何在Flutter Dart中从Firebase存储中的文件链接获取文件名

javascript - 在我自己的网页上插入 new globe by google maps

javascript - Kendo 工具提示相对于鼠标位置?

firebase - 通过安全规则中的某个子值限制查询

react-native - react native trustkit 依赖项 : could not find com. datatheorem.truskit:trustkit-android

android - React Native WebStorm Emulator 无法启动 - 错误无法启动模拟器。原因 : No emulators found as an output of `emulator -list-avds`

java - 我可以使用 Headless JS 调用类中的函数吗? React-Native 安卓

javascript - 如何在 GridView 的 OnLoad 事件上调用 javascript 函数?

javascript - Firebase:TypeError:firebase.firestore 不是函数