为了账号安全,请及时绑定邮箱和手机立即绑定

控制 FirebaseStorage 中的用户图像

控制 FirebaseStorage 中的用户图像

动漫人物 2023-11-10 15:34:04
我正在使用 Firebase 在 Android 上制作社交应用程序。每个用户最多可以上传三张图像,这些图像使用 FirebaseStorage 存储。用户添加照片的活动我使用用户的唯一 ID 来命名照片。例如,用户的照片将被称为:userid_1.jpg、userid_2.jpg、userid_3.jpg我使用第一张图片作为用户的个人资料图片。这一切都很好,但我想允许用户删除照片并添加新照片。例如,用户有三张照片并删除了第一张,所以现在 photo2 移动到 photo1 的位置,而 photo3 占据 photo2 的位置。所以我可以很容易地在活动中得到这个效果:photo1ImageView.setImageDrawable(photo2ImageView.getDrawable()); photo2ImageView.setImageDrawable(photo3ImageView.getDrawable()); photo3ImageView.setImageResource(R.drawable.addphotoicon);但现在的问题是如何在 FirebaseStorage 中处理这个问题。显然我是从删除图片开始的。FirebaseStorage.getInstance().getReference().child("images").child(userID + "_1.jpg").delete();然后我想做的就是重命名剩下的两张图片。所以删除photo1后,userid_1.jpg消失,userid_2.jpg变成userid_1.jpg,userid_3.jpg变成userid_2.jpg但无法重命名 FirebaseStorage 中的文件。所以现在当这个 Activity 下次加载时,它会将 photo2 放入第二个 ImageView 中,将 photo3 放入第三个 ImageView 中,将第一个 ImageView 留空。个人资料图片 (userid_1.jpg) 也会丢失。这不是我想要的行为。我想到的另一种方法是:每当删除照片时,我都会删除所有用户的照片,并以正确的名称重新上传剩余的照片,但这在 Firebase 上效率非常低且不必要。我只是想知道是否有人能想出一种有效的方法来做到这一点。
查看完整描述

2 回答

?
米脂

TA贡献1836条经验 获得超3个赞

云存储不太擅长维护上传到其中的对象的顺序。即使是大多数普通的计算机文件系统也无法做到这一点。

我建议放弃存储将维护任何类型的顺序或顺序的想法,并将该逻辑完全移至数据库或其他数据存储中,这确实使您能够轻松地订购其中的项目。上传到存储的文件的名称可以是随机的 - 它们不需要任何含义。您只需要将它们的路径存储在数据库的相关记录中,并保持两者同步即可。


查看完整回答
反对 回复 2023-11-10
?
呼如林

TA贡献1798条经验 获得超3个赞

你可以在这里应用一个小技巧。

将您的用户照片参考作为对象数组存储到数据库中。为您的照片创建一个模型类。可以是这样的:


class UserPhoto {

    var photoRef: String? = null //Reference of your photo in Cloud Storage

    var downloadUrl: String? = null //This is optional, but very handy.

    var timestamp: Long? = null // In milseconds

    var order: Int = -1

}

这里你可以看到“时间戳”和“顺序”是判断照片是否是最新的关键。只需将此数据作为数组存储在用户文档中即可。每张照片都会有这个数据。然后,您可以根据每个用户照片的此数据模型将逻辑放入应用程序/服务器中。


查看完整回答
反对 回复 2023-11-10
  • 2 回答
  • 0 关注
  • 65 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信