我正在尝试在Ionic 2中制作聊天应用。因此,当用户在聊天中发送图片时,我会将其上传到Firebase存储,并为我提供该图片的网址。当用户再次发送同一图像时,图像会再次上传到Firebase,并覆盖上一张图像并提供一个新的URL,从而导致旧图像发送出现问题。
我知道显而易见的解决方案是通过重命名来上传图片,但我不想多次上传相同的图片。有更聪明的解决方案吗?请建议。
答案 0 :(得分:1)
您可以通过调用getDownloadUrl()
来检查Firebase存储中是否已存在该文件。
ref.child('example.png').getDownloadURL()
.then(url => {
// File exist
})
.catch(err => {
// File didnt exist or other error
});
编辑: 为了防止上传两个具有相同名称的不同图像,我建议使用customMetadata,用图像的base64编码的MD5哈希标记每个图像。然后在遇到具有相同名称的图像时,在上传时使用此哈希进行比较。如果是具有相同名称的不同图像,则必须重命名图像。请务必重复此过程,以便处理具有相同名称的2个以上图像的情况。
一些伪代码来说明我的意思:
uploadImg(img){
hash = create base64 md5 hash of image
do {
if(filename exist in storage){
get storage file metadata in order to get a hold of its hash
if(hash is equal to hash from storage){
use file in storage instead
}
else{
alter the filename eg. using a counter and make the do-while-loop run again
}
else{
uploadFile(img, metadata containing hash)
}
}while(other file with same name exist in storage)
}