Firebase存储URL随新令牌不断变化

Pro*_*igy 6 android firebase firebase-realtime-database firebase-storage

我正在尝试使用Firebase数据库和存储来构建社交媒体应用程序。以下是预期的流量。

  1. 用户上传个人资料图片(存储在当前用户文件夹中的firebase存储器中)和URL(存储在firebase数据库中),以便快速访问。(工作正常)

  2. 用户发表他们的想法。这样可以在数据库中保存用户信息,例如帖子消息,用户名和个人资料图像URL。(工作正常)。

问题

现在的问题是,说用户更新了他或她的个人资料图片,这会覆盖Firebase存储中的旧个人资料图片(以便管理存储并使所有评论和帖子中的用户图片都相同)。在帖子活动中,由于令牌已更改,因此无法访问较旧的个人资料图片网址。

我想知道如何解决此问题,以使Firebase存储URL在所有更新中都是静态的(即相同)。

NB

使用毕加索而非Firebase方法获取图像

Pro*_*igy 6

虽然这个问题已经被问了很长时间,但我注意到有些人仍然觉得很难解决这个问题,所以我将在下面提供我的解决方案。

步骤 1由于存储 URL 在更改时始终是动态的(即拥有令牌),因此我所做的就是为所有用户存储的图像文件(例如头像 )使用通用名称

步骤 2 为每个用户在存储中创建一个目录,如下所示:users/{uid}/avatar.jpg

STEP 3 使用步骤2中的路径拉取或显示图像(见下文)

安卓

StorageReference storageReference = FirebaseStorage.getInstance().getReference("users").child(userId).child("avatar.jpg");
    
Glide.with(context).using(new FirebaseImageLoader()).load(storageReference).diskCacheStrategy(DiskCacheStrategy.ALL)
                .error(R.drawable.ch_white_icon).placeholder(R.drawable.ch_white_icon).into(imageView);
Run Code Online (Sandbox Code Playgroud)

网络

var storage = firebase.storage();
    var pathReference = storage.ref('users/' + userId + '/avatar.jpg');
    pathReference.getDownloadURL().then(function (url) {
        $("#large-avatar").attr('src', url);
    }).catch(function (error) {
        // Handle any errors
    });
Run Code Online (Sandbox Code Playgroud)

这样您就不必再担心动态链接了,每当您将新图像上传到上述路径时,它都会覆盖前一个图像,并且步骤 3 中的代码将为您提供新图像。

PS:对于Android,如果您不想滑动缓存图像,请不要忘记将DiskCacheStrategy.ALL更改为DiskCacheStrategy.NONE,或者如果允许缓存,您可以使用时间戳来获取新图像。