URL возвращает NIL, если UID добавлен в путь хранения. Но изображение хранится в базе данных - PullRequest
0 голосов
/ 03 августа 2020

Вот мой код, он выглядит идеально, но когда я пытаюсь добавить 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 голосов
/ 03 августа 2020

Вы используете 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
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...