Как удалить 1-3 фото из Firebase Storage по URL из Firebase Realtime Database?
Загружаю 1-3 картинки в Firebase Storage
private fun uploadImages() {
if (imageIndex == 3) {
dbManager.publishAd(ad!!, onPublishFinish())
return
}
val oldUrl = getUrlFromAd()
if (imageAdapter.mainArray.size > imageIndex) {
val byteArray = prepareImageByteArray(imageAdapter.mainArray[imageIndex])
if(oldUrl.startsWith("http")){
updateImage(byteArray, oldUrl){
nextImage(it.result.toString())
}
} else {
uploadImage(byteArray) {
//dbManager.publishAd(ad!!, onPublishFinish())
nextImage(it.result.toString())
}
}
} else {
if (oldUrl.startsWith("http")) {
deleteImageByUrl(oldUrl) {
nextImage("empty")
}
} else {
nextImage("empty")
}
}
}
private fun nextImage(uri: String){
setImageUriToAd(uri)
imageIndex++
uploadImages()
}
private fun setImageUriToAd(uri: String){
when(imageIndex){
0 -> ad = ad?.copy(mainImage = uri)
1 -> ad = ad?.copy(image2 = uri)
2 -> ad = ad?.copy(image3 = uri)
}
}
private fun getUrlFromAd(): String{
return listOf(ad?.mainImage!!, ad?.image2!!, ad?.image3!!)[imageIndex]
}
private fun prepareImageByteArray(bitMap: Bitmap): ByteArray{
val outStream = ByteArrayOutputStream()
bitMap.compress(Bitmap.CompressFormat.JPEG, 20, outStream)
return outStream.toByteArray()
}
private fun uploadImage(byteArray: ByteArray, listener: OnCompleteListener<Uri>){
val imStorageRef = dbManager.dbStorage
.child(dbManager.auth.uid!!)
.child("image_${System.currentTimeMillis()}")
val upTask = imStorageRef.putBytes(byteArray)
upTask.continueWithTask {
task -> imStorageRef.downloadUrl
}.addOnCompleteListener(listener)
}
private fun deleteImageByUrl(oldUrl: String, listener: OnCompleteListener<Void>){
dbManager.dbStorage.storage
.getReferenceFromUrl(oldUrl)
.delete().addOnCompleteListener(listener)
}
private fun updateImage(byteArray: ByteArray, url: String, listener: OnCompleteListener<Uri>){
val imStorageRef = dbManager.dbStorage.storage.getReferenceFromUrl(url)
val upTask = imStorageRef.putBytes(byteArray)
upTask.continueWithTask{
task-> imStorageRef.downloadUrl
}.addOnCompleteListener(listener)
}
При нажатии кнопки "удалить объявление", мне нужно взять URL этих записей из базы Firebase Realtime Database по uid и удалить Firebase Storage по пути main/uid/"image_${System.currentTimeMillis()}"
Код кнопки удалить объявление:
fun deleteAd(ad: Ad, listener: FinishWorkListener){
if(ad.key == null || ad.uid == null) return
db.child(ad.key).child(ad.uid).removeValue().addOnCompleteListener {
if(it.isSuccessful) listener.onFinish(true)
}
delFromFavs(ad, listener)
delFromFilter(ad, listener)
delFromInfo(ad, listener)
}