SwiftUI:将多个图像上载到Firebase
目标:从SwiftUI应用程序上传3张图片到Firebase,每个图片都有不同的URL 问题:我只上传了1个 我尝试过的(但没有成功)。。。。 : 全功能波纹管:SwiftUI:将多个图像上载到Firebase,firebase,swiftui,firebase-storage,Firebase,Swiftui,Firebase Storage,目标:从SwiftUI应用程序上传3张图片到Firebase,每个图片都有不同的URL 问题:我只上传了1个 我尝试过的(但没有成功)。。。。 : 全功能波纹管: static func savePostPhoto( //id userId: String, image1: Data, image2: Data, image3: Data, // imagesArray : [Data], met
static func savePostPhoto(
//id
userId: String,
image1: Data,
image2: Data,
image3: Data,
// imagesArray : [Data],
metadata: StorageMetadata,
storagePostRef: StorageReference,
onSuccess: @escaping() -> Void,
onError: @escaping(_ errorMessage: String) -> Void)
{
let arrayOfImages : [Data] = [image1, image2, image3]
//image storage
storagePostRef.putData(image1, metadata: metadata) { (storageMetadata, error) in
if error != nil {
onError(error!.localizedDescription)
return
}
//image URL
storagePostRef.downloadURL { (url, error) in
let image1 = url?.absoluteString
let image2 = url?.absoluteString
let image3 = url?.absoluteString
}
}
}
每次调用
putData
都会在调用putData
的位置存储一个图像
因此,如果要存储三个单独的图像,必须对三个不同的StorageReference
对象调用putData
。然后,要获取三个下载URL,还需要对三个StorageReference
对象中的每一个调用downloadURL
storagePostRef1.putData(image1, metadata: metadata) { (storageMetadata, error) in
storagePostRef1.downloadURL { (url1, error) in
let image1 = url?.absoluteString storagePostRef2.putData(image2, metadata: metadata) { (storageMetadata, error) in
storagePostRef2.downloadURL { (url2, error) in
storagePostRef3.putData(image3, metadata: metadata) { (storageMetadata, error) in
storagePostRef3.downloadURL { (url3, error) in
您可以创建自己的helper函数来处理对putData
和downloadUrl
的调用,只需一个闭包/回调,就可以稍微清理一下
storagePostRef1.putData(image1, metadata: metadata) { (storageMetadata, error) in
storagePostRef1.downloadURL { (url1, error) in
let image1 = url?.absoluteString storagePostRef2.putData(image2, metadata: metadata) { (storageMetadata, error) in
storagePostRef2.downloadURL { (url2, error) in
storagePostRef3.putData(image3, metadata: metadata) { (storageMetadata, error) in
storagePostRef3.downloadURL { (url3, error) in