繁体   English   中英

尝试将图像上传到 firebase 存储

[英]Try to upload an image into firebase storage

我正在尝试将设备上的图像上传到 Firebase 存储,但我不知道应该使用哪种格式。 我试过 put 和 putString,但他们都给了我无效的论点。

这是选择和上传图像的代码。

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

    if (!result.cancelled) {
      setImage(result.uri);
    }
  };

  const uploadImage = async () => {
    if (!image) {
      Alert.alert(
        'You have to choose an image first'
      );
    } else {
      const uri = image;
      console.log(uri);
      const filename = uri.substring(uri.lastIndexOf('/') + 1);
      const uploadUri = Platform.OS === 'ios' ? uri.replace('file://', '') : uri;
      setUploading(true);
      setTransferred(0);
      const task = firebase.storage()
        .ref(filename)
        .put(uploadUri);
      // set progress state
      task.on('state_changed', snapshot => {
        setTransferred(
          Math.round(snapshot.bytesTransferred / snapshot.totalBytes) * 10000
        );
      });
      try {
        await task;
      } catch (e) {
        console.error(e);
      }
      setUploading(false);
      Alert.alert(
        'Photo uploaded!',
        'Your photo has been uploaded to Firebase Cloud Storage!'
      );
      setImage(null);
      }
};

这是图像的 uri(con​​sole.log 输出): 在此处输入图片说明

这是使用 .put(uploadUri) 的错误:

在此处输入图片说明

这是使用 .putString(uploadUri, 'data_url') 的错误:

在此处输入图片说明

为了使用put在 Firebase 存储上上传图像,您需要将blob作为 param 而不是string传递。

例如,您可以执行以下操作:

import path from 'path'

const uid = 'image-id'
const fileName = uid + path.extname(uri)
const response = await fetch(uri)
const blob = await response.blob()


const uploadImage = firebase
      .storage()
      .ref()
      .put(blob, {
        contentType: `image/${path.extname(uri).split('.').pop()}`
      })

uploadImage.on(
      'state_changed',
      snapshot => {
        // progress
      },
      err => {
        // error
      },
      () => {
        // complete
      }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM