[英]Value of type 'StorageMetadata' has no member 'downloadURL' in swift and firebase
[英]Trying to upload images into Firebase error: Value of type 'StorageMetadata' has no member 'downloadURL' - SWIFT 4
我知道还有另外2个类似的问题(在下面链接),我已经尝试了数小时试图为我的代码应用解决方案,但没有成功。 我正在尝试为我的应用程序构建后端,并希望将多个图像作为一个“帖子”上传到Firebase,就像Instagram的功能一样。 下面的代码是我的ImageUploadManager巫婆,用于处理我的练习项目以“一贴多张图像”方式上传到Firebase的照片。
链接到其他2个问题: 类型'StorageMetadata'的值没有成员'downloadURL'
StorageMetadata”没有成员“ downloadURL”
import UIKit
import FirebaseStorage
import Firebase
struct Constants {
struct Car {
static let imagesFolder: String = "carImages"
}
}
class ImageUploadManager: NSObject {
//Below code (comented out) is for completion progress visual
func uploadImage(_ image: UIImage, /**/ progressBlock: @escaping (_ percentage: Double) -> Void, /**/ completionBlock: @escaping (_ url: URL?, _ errorMessage: String?) -> Void) {
let storage = Storage.storage()
let storageReference = storage.reference()
//storage/carImages/{customId}/image.jpg
let imageName = "\(Date().timeIntervalSince1970).jpg"
let imagesReference = storageReference.child(Constants.Car.imagesFolder).child(imageName)
if let imageData = UIImageJPEGRepresentation(image, 0.8) {
let metadata = StorageMetadata()
metadata.contentType = "image/jpg"
let uploadTask = imagesReference.putData(imageData, metadata: metadata, completion: { (metadata, error) in
//Lines below may also be for progress bar not sure
if let metadata = metadata {
//Error here completionBlock(metadata.downloadURL(), nil)
} else {
completionBlock(nil, error?.localizedDescription)
}
//ends here
})
uploadTask.observe(.progress, handler: { (snapshot) in
//Below lines for Progress bar on upload
guard let progress = snapshot.progress else {
return
}
let percentage = (Double(progress.completedUnitCount) / Double(progress.totalUnitCount)) * 100
progressBlock(percentage)
//Ends here
})
} else {
completionBlock(nil, "Image could not be converted to Data.")
}
}
}
带有以下答案的更新代码:Ive用他的解决方案替换了旧的'let uploadTask ='
import UIKit
import FirebaseStorage
import Firebase
struct Constants {
struct Car {
static let imagesFolder: String = "carImages"
}
}
class ImageUploadManager: NSObject {
//Below code (comented out) is for completion progress visual
func uploadImage(_ image: UIImage, /**/ progressBlock: @escaping (_ percentage: Double) -> Void, /**/ completionBlock: @escaping (_ url: String?, _ errorMessage: String?) -> Void) {
let storage = Storage.storage()
let storageReference = storage.reference()
//storage/carImages/{customId}/image.jpg
let imageName = "\(Date().timeIntervalSince1970).jpg"
let imagesReference = storageReference.child(Constants.Car.imagesFolder).child(imageName)
if let imageData = UIImageJPEGRepresentation(image, 0.8) {
let metadata = StorageMetadata()
metadata.contentType = "image/jpg"
// let storageRef = Storage.storage().reference().child("profile_images").child("\(imageName).png")
let uploadTask = imagesReference.putData(imageData, metadata: metadata, completion: { (metadata, error) in
if let metadata = metadata {
imagesReference.downloadURL { (url, error) in
guard let downloadURL = url else {
// Uh-oh, an error occurred!
return
}
}
completionBlock(downloadURL, nil)
} else {
completionBlock(nil, error?.localizedDescription)
}
})
uploadTask.observe(.progress, handler: { (snapshot) in
guard let progress = snapshot.progress else {
return
}
let percentage = (Double(progress.completedUnitCount) / Double(progress.totalUnitCount)) * 100
progressBlock(percentage)
})
} else {
completionBlock(nil, "Image could not be converted to Data.")
}
}
}
下载URL在metadata
对象上不再可用。 上传完成后,您download URL
在StorageReference
上调用download URL
。
let uploadTask = imagesReference.putData(imageData, metadata: metadata, completion: { (metadata, error) in
if let metadata = metadata {
imagesReference.downloadURL { (url, error) in
guard let downloadURL = url else {
// Uh-oh, an error occurred!
return
}
}
completionBlock(downloadURL, nil)
} else {
completionBlock(nil, error?.localizedDescription)
}
})
请注意,这是直接来自文档的副本,因此我建议您也进行一些研究: https : //firebase.google.com/docs/storage/ios/upload-files#upload_from_data_in_memory
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.