目标:将 3 个图像从 SwiftUI 应用上传到 Firebase,每个图像具有不同的 URL。
问题:我只上传了 1 个。
我尝试过的(但没有用)...... :
storagePostRef.putData(image1, image2, image3, metadata: metadata) { (storageMetadata, error) in
完整功能如下:
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
}
}
}
答案 0 :(得分:1)
每次调用 putData
都会在您调用 putData
的位置存储一个图像。
因此,如果您想存储三个单独的图像,则必须对三个不同的 putData
对象调用 StorageReference
。要获取这三个下载 URL,您还需要对三个 downloadURL
对象中的每一个调用 StorageReference
。
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
您可以通过创建自己的辅助函数来处理对 putData
和 downloadUrl
的调用,并使用单个闭包/回调来稍微清理一下。