简体   繁体   中英

Uploading a image to firebase storage

I have been using the firebase guides to upload a user image to firebase storage but after I upload the user image nothing appears in the folder. How do I solve this problem to successfully upload my image to firebase storage is there anything i'm missing ?

Size 0 bytes

let storage = Storage.storage()
        let storageRef = storage.reference()
         let image = UIImage(named: "ProfileImage")
       let data = Data()
         let starsRef = storageRef.child("ProfileImage.jpeg")
        let metadata = StorageMetadata()
        metadata.contentType = "ProfileImage/jpeg"
        let uploadTask = starsRef.putData(data, metadata: nil) { (metadata, error) in
         guard let metadata = metadata else {
           return
         }

         let size = metadata.size

         starsRef.downloadURL { (url, error) in
           guard let downloadURL = url else {

             return
           }
         }
       }

Here is 6 steps on how to upload the image to Firebase Storage and retrieve the URL path for later usage.

  1. Create an unique name using UUID().uuidString
  2. Compress the image into compressionQuality
  3. Sat the metaData as .jpeg
  4. Add the data to Firebase Storage
  5. If succeeded, retrieve the image URL
  6. Convert the URL to url?.absoluteString and print it out using print

     //1. Create an unique name for your image let imageName = UUID().uuidString let imageReference = Storage.storage().reference().child(imageName) //2. Compress quality if let uploadData = self.tempImageView.image!.jpegData(compressionQuality: 0.5){ //3. Save image as .jpeg let metaDataForImage = StorageMetadata() metaDataForImage.contentType = "image/jpeg" //4. Add the data to Firebase Storage imageReference.putData(uploadData, metadata: metaDataForImage) { (meta, err) in if let err = err{ print(err.localizedDescription) } else{ //5. Retrieving the image URL imageReference.downloadURL { (url, err) in if let err = err{ print(err.localizedDescription) } else{ //6. Print the complete URL as string let urlString = url?.absoluteString print(urlString) } } } } }

Make that let data a guard let data , that way you won't have to force-unwrap when you need it to be non-optional. I'd say generally avoid force-unwrapping in general.

  1. The contentType should be image/jpeg . I googled some piece codes , it shows the same concept.
  2. About contentType , more detail at this wiki link .
  3. If you upload an image with jpeg format, then you should upload jpeg binary. But data = image.pngData() , it seems to be the binary data of png .

// data is `png` binary
let data = image.pngData()
// imageData is `jpeg` binary 
let imageData = image.jpegData(compressionQuality: 0.9)
let uiImage: UIImage = UIImage(data: imageData!)!

 let starsRef = storageRef.child("ProfileImage.jpg")
let metadata = StorageMetadata()

// About contentType
// See it: https://en.wikipedia.org/?title=Content_type&redirect=no 
metadata.contentType = "ProfileImage/jpeg"

// data is `png` binary, but contentType is `jpeg` ? 
let uploadTask = starsRef.putData(data!, metadata: nil) { (metadata, error) in
 guard let metadata = metadata else {
   return
 }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM