Reputation: 41
For some reason, when I am using firebase storage to retrieve my download image URL (I have confirmed that the image is actually sent to firebase storage), the url is returning nil. I'm pretty sure my file path matches/is correct but I'm not sure where I'm going wrong on this.
let selectedImageData=UIImageJPEGRepresentation(selectedImage.image!, 1)
let storageRef=Storage.storage().reference()
let metadata=StorageMetadata()
storageRef.child("Users").child(Auth.auth().currentUser!.uid)
.child("Pictures"+String(self.tracker)).putData(selectedImageData!, metadata: metadata)
{
(metadata, error) in
if error != nil{
print("There was a problem uploading")
return
}
storageRef.child("Users").child(Auth.auth().currentUser!.uid)
.child("Pictures"+String(self.tracker)).downloadURL(completion:
{
(url, error) in
print("What's going on")
self.pictures.append((url?.absoluteString)!)
})
}
Upvotes: 3
Views: 899
Reputation: 6380
Seems like your reference for putData and for getting downloadURL is different some how, maybe the tracker is changing in the meantime?
To avoid the reference being different let's try changing your code like this:
let selectedImageData=UIImageJPEGRepresentation(selectedImage.image!, 1)
let storageRef=Storage.storage().reference()
let metadata=StorageMetadata()
let reference = storageRef.child("Users").child(Auth.auth().currentUser!.uid).child("Pictures"+String(self.tracker))
reference.putData(selectedImageData!, metadata: metadata) { (metadata, error) in
if error != nil{
print("There was a problem uploading")
return
}
reference.downloadURL { (url, error) in
print("Download error: \(error), url: \(url)")
self.pictures.append((url?.absoluteString)!)
}
}
Basically we make sure to use the same reference in both cases.
Upvotes: 0
Reputation: 1754
Use the below code to upload image to Storage and get a return path for the image
let selectedImageData=UIImageJPEGRepresentation(selectedImage.image!, 1)
self.uploadProfileImageToFirebase(data: selectedImageData)
func uploadProfileImageToFirebase(data:NSData){
let storageRef = Storage.storage().reference().child("Users").child(Auth.auth().currentUser!.uid).child("Pictures").child(String(self.tracker))
//Modify the above line as per your requirement
if data != nil {
storageRef.putData(data as Data, metadata: nil, completion: { (metadata, error) in
if(error != nil){
print(error)
return
}
// Fetch the download URL
storageRef.downloadURL { url, error in
if let error = error {
// Handle any errors
if(error != nil){
print(error)
return
}
} else {
// Get the download URL
let urlStr:String = (url?.absoluteString) ?? ""
print(urlStr)
}
}
})
}
Upvotes: 1