我正在尝试使用 firebase 数据库和存储构建社交媒体应用程序。以下是预期的流程。
用户上传个人资料图片,该图片存储在当前用户文件夹中的 Firebase 存储中,并且 URL 存储在 Firebase 数据库中以便快速访问。 (工作正常)
用户发表他们的想法。这会将用户信息(例如帖子消息、用户名和个人资料图像 URL)保存在数据库中。 (工作正常)。
Problem
现在的问题是,用户更新了他或她的个人资料图片,这会覆盖 Firebase 存储中的旧个人资料图片(以便管理存储并使用户图片在所有评论和帖子中都相同)。在发布消息活动中,无法访问较旧的个人资料图像 URL,导致令牌发生更改。
Question
我想知道如何解决这个问题,以便 firebase 存储 URL 在所有更新中都是静态的(相同)。
NB
使用Picasso而不是firebase方法来获取图像
虽然这个问题已经被问了很长时间,但我注意到有些人仍然觉得很难解决这个问题,所以我将在下面提供我的解决方案。
STEP 1由于存储 URL 在更改时始终是动态的(即拥有令牌),因此我所做的是使用存储的图像文件的通用名称avatar对于所有用户
STEP 2为每个用户在存储中创建一个目录,如下所示:users/{uid}/avatar.jpg
STEP 3使用步骤2中的路径拉取或显示图像(见下文)
ANDROID
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);
WEB
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
});
这样您就不必再担心动态链接了,每当您将新图像上传到上述路径时,它都会覆盖前一个图像,并且步骤 3 中的代码将为您提供新图像。
PS:对于 Android,如果您不希望 glide 缓存图像,请不要忘记将 DiskCacheStrategy.ALL 更改为 DiskCacheStrategy.NONE,或者如果允许缓存,您可以使用时间戳来获取新图像。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)