Pro*_*igy 6 android firebase firebase-realtime-database firebase-storage
我正在尝试使用Firebase数据库和存储来构建社交媒体应用程序。以下是预期的流量。
用户上传个人资料图片(存储在当前用户文件夹中的firebase存储器中)和URL(存储在firebase数据库中),以便快速访问。(工作正常)
用户发表他们的想法。这样可以在数据库中保存用户信息,例如帖子消息,用户名和个人资料图像URL。(工作正常)。
现在的问题是,说用户更新了他或她的个人资料图片,这会覆盖Firebase存储中的旧个人资料图片(以便管理存储并使所有评论和帖子中的用户图片都相同)。在帖子活动中,由于令牌已更改,因此无法访问较旧的个人资料图片网址。
我想知道如何解决此问题,以使Firebase存储URL在所有更新中都是静态的(即相同)。
使用毕加索而非Firebase方法获取图像
虽然这个问题已经被问了很长时间,但我注意到有些人仍然觉得很难解决这个问题,所以我将在下面提供我的解决方案。
步骤 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,或者如果允许缓存,您可以使用时间戳来获取新图像。
| 归档时间: |
|
| 查看次数: |
1822 次 |
| 最近记录: |