我使用图像选择器,以便用户可以将图像从库上传到他们的帖子。然后我想将图片保存在Firestore存储中,通过以下代码:
public typealias UploadPictureCompletion = (Result<String, Error>) -> Void
public func uploadEventHeaderImage(with data: Data, fileName: String, completion: @escaping UploadPictureCompletion){
bucket.child("event_images/\(fileName)").putData(data, metadata: nil, completion: {metadata, error in
guard error == nil else{
//failed
print("failed to upload event image to firebase")
completion(.failure(StorageErrors.failedToUpload))
return
}
self.bucket.child("event_images/\(fileName)").downloadURL(completion: {url, error in
guard let url = url else{
print("failed to get download url from firebase")
completion(.failure(StorageErrors.failedToGetDownloadURL))
return
}
let urlString = url.absoluteString
print("download ur returned: \(urlString)")
completion(.success(urlString))
})
})
}
调用此函数时,我执行以下操作:
let filename = "\(eventId).png"
guard let data = headerImage.pngData() else {
return
}
StorageManager.shared.uploadEventHeaderImage(with: data,
fileName: filename,
completion: {result in
switch result {
case .success(let downloadUrl):
UserDefaults.standard.set(downloadUrl, forKey: "event_image_url")
print(downloadUrl)
case .failure(let error):
print("Storage manager error: \(error)")
}
})
在 Firebase Storage 中,我创建了一个名为“event_images”的文件夹。运行代码时,出现错误“无法将事件图像上传到 firebase”。这种情况下可能出现什么问题?
guard error == nil else{
//failed
print("failed to upload event image to firebase -- \(error)")
completion(.failure(StorageErrors.failedToUpload))
return
}
失败的可能原因有很多。打印出错误消息本身也将帮助您获得更准确的信息。