Android端如何引用Firebase Cloud Storage中的随机命名图片?
问题:Firebase Storage随机命名图片的引用与删除问题
我使用UUID.randomUUID()方法生成随机图片名上传至Firebase Storage,但在上传新图片前无法引用旧图片进行删除操作。手动输入Storage中的原始文件名可以完成删除,但我需要一种无需手动输入即可获取文件引用的方法。
原Kotlin代码
val uuid = UUID.randomUUID() val imageName = "$uuid.jpg" val imagereference = FirebaseStorage.getInstance().reference.child("images/$cu/profphoto") .child(imageName) val ref2 = FirebaseStorage.getInstance().reference.child("images/$cu/profphoto/5a91e7f3-144a-4c38-b7b5-36ed644603ca.jpg") val db = FirebaseFirestore.getInstance() ref2.delete().addOnSuccessListener { } imagereference.putFile(imageUri!!) .addOnSuccessListener {}
解决方案
1. 将图片名存入Firestore文档
上传图片时,把生成的随机图片名和下载URL等信息存入Firestore的用户文档中:
val uploadPictureReference = storage.reference.child("images/$cu/profphoto").child(imageName) uploadPictureReference.downloadUrl.addOnSuccessListener { val downloadUrl = it.toString() val auth = FirebaseAuth.getInstance() val cu = auth.currentUser?.uid if (cu != null) { val postMap = hashMapOf<String, Any>() postMap.put("imgName", imageName) postMap.put("downloadUs", downloadUrl) postMap.put("date", Timestamp.now()) if ("downloadUs".isEmpty()) { val new = db.collection("Publikusers").document(cu) new.set(postMap, SetOptions.merge()) .addOnSuccessListener {} } } }
2. 根据存储的名称获取引用并删除
需要删除旧图片时,从Firestore中读取存储的图片名,以此构建Storage引用并执行删除:
val ref = db.collection("Publikusers").document(cu!!) ref.get().addOnSuccessListener { val currentImageName = it.data?.get("imgName")?.toString() val ref2 = FirebaseStorage.getInstance().reference.child("images/$cu/profphoto/$currentImageName") ref2.delete().addOnSuccessListener {} }
内容的提问来源于stack exchange,提问作者terlan abaszade
相关产品推荐
相关产品推荐

