我正在使用react native和firebase(v9)上传图片到firebase。在firebase存储中,文件上传了,但大小只有9字节,所以它无法正常打开。我不知道如何解决这个问题:S
const uploadFiles = (file, name, storeKey) => {
if(!file){
console.log('no file exists')
return;
}
const exe = file.substring(file.lastIndexOf('.'));
const fileName = name + exe;
const storageRef = ref(storage, `/files/${fileName}`);
const uploadTask = uploadBytesResumable(storageRef, file);
uploadTask.on('state_changed', null,
(error) => {
alert(error);
},
() => {
getDownloadURL(uploadTask.snapshot.ref)
.then((URL) => {
setDoc(doc(db, 'Store', storeKey, 'coffeeDB', name), {postImage: URL}, {merge: true});
console.log('url registered')
});
}
)
}
2条答案
按热度按时间axzmvihb1#
如果你调用的是
file.substring(...)
,那么file
似乎是一个文件名。你不能只通过传递文件名来上传文件,因为这会带来安全风险。相反,你需要传递一个Blob | Uint8Array | ArrayBuffer
,如这里和这里所示,通常是通过传递你从中获得文件名的File
引用。px9o7tmv2#
我在使用tinymce的angular 14和angular fire 7时遇到了一个奇怪的问题。上传图像并选择文件将正确上传到firebase,但将相同的图像文件拖放到tinymce将导致文件以9字节八位字节流文件的形式上传到firebase,就像你看到的那样。检查blobInfo,它都显示正确,文件名正确,大小正确,image/png作为contentType,但AngularFireStorage.upload方法只是忽略了元数据。最终使用blobInfo上的.base64方法使其工作,并使用.putString方法将其发送到firebase。
只需使用this.storage.upload(filePath,blobInfo.blob(),metadata)(它应该做同样的事情,但发送blob而不是不工作)。与您所看到的略有不同,但在这里留下这个想法,以防其他人也遇到图像上传到firebase的问题,最终以9字节文件结束。