这是我的代码,看起来很完美,但是当我尝试添加UID(以使路径唯一)然后保存图像并获得下载URL时,不会生成下载图像,但是会保存图像。该如何解决?
let storage = Storage.storage()
if let fbProfilePicture = profilePic?.jpegData(compressionQuality: 0.4) {
let storageRef = Storage.storage().reference().child("images")
let data = Data()
let userID = Auth.auth().currentUser!.uid
print(userID)
var profileRef = storageRef.child(userID)
let riversRef = storageRef.child("profile.png")
let uploadTask = riversRef.putData(fbProfilePicture, metadata: nil) { (metadata, error) in
guard let metadata = metadata else {
// Uh-oh, an error occurred!
print(error)
return
}
}
print("Entered")
riversRef.downloadURL { (url, error) in
print(url)
self.db.collection("customUser").document(userID).setData(["Name": self.userName, "password": self.password, "Email": self.email, "DateCreated": formattedDate, "imageURL": url?.absoluteString])
guard let downloadURL = url else {
// Uh-oh, an error occurred!
return
}
}
}
答案 0 :(得分:0)
您正在对riversRef
和putData
使用downloadURL
,尽管此存储引用当前指向profile.png
所引用的子级。在查看代码时,您应该改用profileRef
(并附加文件类型,例如.png
)。
所以您的代码如下:
let storage = Storage.storage()
if let fbProfilePicture = profilePic?.jpegData(compressionQuality: 0.4) {
let storageRef = Storage.storage().reference().child("images")
let data = Data()
let userID = Auth.auth().currentUser!.uid
print(userID)
let filename = userID + ".png"
var profileRef = storageRef.child(filename)
let uploadTask = profileRef.putData(fbProfilePicture, metadata: nil) { (metadata, error) in
guard let metadata = metadata else {
// Uh-oh, an error occurred!
print(error)
return
}
}
print("Entered")
profileRef.downloadURL { (url, error) in
print(url)
self.db.collection("customUser").document(userID).setData(["Name": self.userName, "password": self.password, "Email": self.email, "DateCreated": formattedDate, "imageURL": url?.absoluteString])
guard let downloadURL = url else {
// Uh-oh, an error occurred!
return
}
}
}