Firebase9 云存储 [未处理的承诺拒绝:ReferenceError:属性“存储”不存在]

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

我收到以下错误:

[未处理的承诺拒绝:不变违规:无法构造

File
:必须同时传递
parts
name
参数。]

我正在尝试通过选择手机上的图片将图片上传到Firebase云存储。尝试传递 URI 如下所示:

file:///Users/miamiamia/Library/Developer/CoreSimulator/Devices/CEC7A0BD-01C0-4929-8CF7-74A7FE34293D/data/Containers/Data/Application/C49F3C42-E858-4612-8088-E578FCABA4D6/Library/Caches/ExponentExperienceData/%2540miamiamia%252Fagain/ImagePicker/164BF9DA-8A20-4C97-A892-CB5A1BB4643D.jpg

我做错了什么?我正在使用 reactnative

const handleButtonPress = async() => {
    const result =  await ImagePicker.launchImageLibraryAsync({
      mediaTypes: ImagePicker.MediaTypeOptions.Images,
    });
    setImageUri(result.assets[0].uri)
    console.log(imageUri)
    const { uri } = result.assets[0].uri;
    // const storageRef = storage.ref();
    // const imageRef = storageRef.child('images/image.jpg');
    const storageRef = ref(storage, "path/to/image.jpg")
    const file = new File([""], uri);
    const uploadTask = putFile(storageRef, file)
    uploadTask.then((snapshot) => {
      console.log("Uploaded a blob or file!");
      const downloadURL = getDownloadURL(storageRef);
    });
}
javascript firebase react-native google-cloud-firestore react-native-firebase
1个回答
0
投票

一种方法是从 ImagePicker 请求 base64 字符串。您可以将

base64: true
除了
mediaTypes
作为 options 传递以获取 base64 字符串中的结果,然后您可以使用 firebase upload from string 方法上传文件

const result =  await ImagePicker.launchImageLibraryAsync({
   mediaTypes: ImagePicker.MediaTypeOptions.Images,
   base64: true, //<-- boolean base64
});

result.assests[0]
你可以得到

{
  "uri": "file:///Users/miamiamia/Library/Developer/CoreSimulator/Devices/.....jpg",
  "base64": "data:image/jpeg;base64..."
}

从 firebase 文档来看,这个应该可以解决问题

const message4 = 'data:text/plain;base64,5b6p5Y+344GX44G+44GX44Gf77yB44GK44KB44Gn44Go44GG77yB';
// This should be message4 = result.assests[0].base64
uploadString(storageRef, message4, 'data_url').then((snapshot) => {
  console.log('Uploaded a data_url string!');
});
© www.soinside.com 2019 - 2024. All rights reserved.