我正在使用Firebase在Android上制作社交应用。每个用户最多可以上传三个图像,这些图像使用FirebaseStorage存储。
Activity where users add photos
我正在使用用户的唯一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();
然后我想做的就是重命名其余两张图片。
因此,删除照片1后,userid_1.jpg掉落了,userid_2.jpg变成了userid_1.jpg,userid_3.jpg变成了userid_2.jpg
但是无法在FirebaseStorage中重命名文件。因此,现在下次加载此活动时,它将把photo2放在第二个ImageView中,将photo3放在第三个ImageView中,而将第一个ImageView留为空白。个人资料图片(userid_1.jpg)也将丢失。这不是我想要的行为。
[我想到的另一种方法是:每当删除一张照片时,我都会删除所有用户的照片,并使用正确的名称重新上传其余的照片,但这在Firebase上效率很低并且不必要。
我只是想知道是否有人可以想到一种有效的方法来做到这一点。
云存储在维护上传到其上的对象的顺序方面不是很好。甚至不是大多数普通的计算机文件系统都适合此。
我建议放弃存储将保持任何顺序或顺序的想法,并将该逻辑完全移至数据库或其他数据存储中,这确实使您能够轻松地对其中的项目进行排序。上传到存储设备的文件名可以是随机的-不需要任何含义。您只需要将它们的路径存储在数据库的相关记录中,并使两者保持同步即可。