如果将UID添加到存储路径,则URL返回NIL。但是图像存储在数据库中

时间:2020-08-03 09:32:08

标签: ios swift firebase firebase-storage

这是我的代码,看起来很完美,但是当我尝试添加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
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您正在对riversRefputData使用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
        }
    }
}