我收到以下错误:
[未处理的承诺拒绝:不变违规:无法构造
:必须同时传递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);
});
}
一种方法是从 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!');
});