【发布时间】:2022-11-19 01:25:07
【问题描述】:
我从 Alex Mamo How to upload an image to Firebase 那里得到了一个想法,如何将图像上传到 Firebase 存储并取回 URL 并使用 MVVM 和 Hilt 依赖项上传到 Firestore,但如何将图像 URI 的 ArrayList 上传到存储并取回 URL。
我正在从我的 ViewModel 中的图库中获取 Selected Images Uri
fun updateSelectedImageList(listOfImages: List<Uri>) {
val updatedImageList = state.productImagesList.toMutableList()
viewModelScope.launch {
updatedImageList += listOfImages
state = state.copy(
productImagesList = updatedImageList.distinct()
)
}
}
如果我对 Uri 图片列表的回答有误,请纠正我
资料库
typealias AddCategoryResponse = Response<Boolean>
typealias AddContentUriResponse = Response<Uri>
typealias AddProductImagesResponse = Response<ProductImages>
suspend fun addProductImagesToFirebaseStorage(productImages: List<Uri>) : AddProductImagesResponse
suspend fun addMainCategoryImageToFirebaseStorage(imageUri: Uri,upcomingCat: Int) : AddContentUriResponse
suspend fun addMainCategoryToFirestore(mainCategory: MainCategory) : AddCategoryResponse
我想要一个创建函数来添加多个图像并取回更新的图像 url 返回方法
我的实现
@Singleton
class AdminRepositoryImpl @Inject constructor(
@Named("mainCategory")
private val categoryRef: CollectionReference,
@Named("product")
private val productRef: CollectionReference,
@Named("tags")
private val tagsRef: CollectionReference,
private val categoryImageStorage: FirebaseStorage,
) : AdminRepository {
override suspend fun addProductImagesToFirebaseStorage(productImages: List<Uri>):
AddProductImagesResponse {
return try {
val date = System.currentTimeMillis()
val productDownloadUrls: List<URL> = emptyList()
productDownloadUrls = //Need to get Success Response of the List Images
categoryImageStorage.reference.child("HomeFeed")
.child("Products")
.child("Products$date")
}
}
override suspend fun addMainCategoryImageToFirebaseStorage(
imageUri: Uri, upcomingCat: Int,
): AddContentUriResponse {
return try {
val date = System.currentTimeMillis()
val downloadUrl =
categoryImageStorage.reference.child("HomeFeed").child("SubCategory")
.child("SubCategoryImage$date")
.putFile(imageUri).await()
.storage.downloadUrl.await()
Success(downloadUrl)
}
} catch (e: Exception) {
Failure(e)
}
}
取回上传图片的url
@Composable
fun AddCategoryImageToStorage(
viewModel: CategoryViewModel = hiltViewModel(),
addCategoryImageToStorage : (downloadUrl: Uri) -> Unit
) {
when(val addCategoryImageToStorageResponse =
viewModel.addCategoryImageToStorageResponse){
is Response.Loading -> ProgressBar()
is Response.Success -> addCategoryImageToStorageResponse.data?.let{ downloadUrl - >
LaunchedEffect(downloadUrl){
addCategoryImageToStorage(downloadUrl)
}
}
is Response.Failure -> LaunchedEffect(Unit){
print(addCategoryImageToStorageResponse.e)
}
}
}
用例也被使用
【问题讨论】:
标签: android firebase google-cloud-platform google-cloud-firestore firebase-storage