Ionic 2 app:在firebase存储中上传相同的图片

时间:2017-06-14 10:24:21

标签: angular firebase ionic2 firebase-storage

我正在尝试在Ionic 2中制作聊天应用。因此,当用户在聊天中发送图片时,我会将其上传到Firebase存储,并为我提供该图片的网址。当用户再次发送同一图像时,图像会再次上传到Firebase,并覆盖上一张图像并提供一个新的URL,从而导致旧图像发送出现问题。

我知道显而易见的解决方案是通过重命名来上传图片,但我不想多次上传相同的图片。有更聪明的解决方案吗?请建议。

1 个答案:

答案 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)
}