2017-06-29 168 views
1

爲什麼這不工作?我如何獲得所有功能來運行並執行它的任務?我正在嘗試將2張圖片上傳到我的Firebase存儲中,併爲我的Firebase數據庫(帖子內)中的圖片獲取兩個下載網址。如果它不在那裏,我怎麼能忽略第二個圖像?如何將2張圖片同時上傳到Firebase存儲?

@IBAction func pickImage1(_ sender: Any) { 


    let image = UIImagePickerController() 
    image.delegate = self 
    image.sourceType = UIImagePickerControllerSourceType.photoLibrary 
    image.allowsEditing = false 
    selected = 1 

    self.present(image, animated: true) 
} 

//Add didFinishPickingMediaWithInfo here 
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
    if let image = info[UIImagePickerControllerOriginalImage] as? UIImage { 
     if selected == 1 { 
      myImageView1.image = image 
     } else { 
      myImageView2.image = image 
     } 
    } 
    else { 
     //error 
    } 
    self.dismiss(animated: true, completion: nil) 
} 


@IBAction func pickImage2(_ sender: Any) { 

     let image2 = UIImagePickerController() 
    image2.delegate = self 
    image2.sourceType = UIImagePickerControllerSourceType.photoLibrary 
    image2.allowsEditing = false 
    selected = 2 

    self.present(image2, animated: true) 
} 




@IBAction func upload(_ sender: Any) { 


    if let image1 = myImageView1.image { 
     guard let data = UIImagePNGRepresentation(image1) else { return } 

     let storageRef = Storage.storage().reference().child("images/\(NSUUID().uuidString)/image.png") 
     storageRef.putData(data, metadata: nil, completion: { (metadata, error) in 

      if error != nil { 
       print("error") 
       return 

      } 


      else { 
       let downloadURL = metadata?.downloadURL()?.absoluteString 


       self.ref?.child("Posts").childByAutoId().setValue(["Title": self.titleText.text, "Subtitle": self.subtitleText.text, "Article": self.articleText.text, "Author": self.authorText.text, "Date": self.dateText.text, "Tags": self.tagsText.text, "PostType": self.postType.text, "PostStyle": self.postStyle.text, "PostSize": self.postSize.text, "Download URL": (downloadURL)]) 

      return 
      } 



     }) 
    } 

    if let image2 = myImageView2.image { 
     guard let data = UIImagePNGRepresentation(image2) else { return } 

     let storageRef = Storage.storage().reference().child("images/\(NSUUID().uuidString)/image1.png") 
     storageRef.putData(data, metadata: nil, completion: { (metadata, error) in 
      if error != nil { 
       print("error") 
       return 

      } 


      else { 
       let downloadURL = metadata?.downloadURL()?.absoluteString 
       let downloadURL2 = metadata?.downloadURL()?.absoluteString 

       self.ref?.child("Posts").childByAutoId().setValue(["Title": self.titleText.text, "Subtitle": self.subtitleText.text, "Article": self.articleText.text, "Author": self.authorText.text, "Date": self.dateText.text, "Tags": self.tagsText.text, "PostType": self.postType.text, "PostStyle": self.postStyle.text, "PostSize": self.postSize.text, "Download URL": (downloadURL), "Download URL 2": (downloadURL2)]) 


      } 

     }) 
    } 

}

回答

4

要檢查文件是否已經存在,你想打電話storageRef.metadataWithCompletion

解開一個可選的圖像你可以做

if let image = self.myImageView2.image as? UIImage { // upload it }

編輯

像這樣的事情

if let image = imageView.image { 
     guard let data = UIImagePNGRepresentation(image) else { return } 

     let storageRef = Storage.storage().reference().child("images/\(NSUUID().uuidString)/image.png") 
     storageRef.putData(data, metadata: nil, completion: { (metadata, error) in 
      // Handle it 
     } 
    } 

    if let image1 = imageView1.image { 
     guard let data = UIImagePNGRepresentation(image1) else { return } 

     let storageRef = Storage.storage().reference().child("images/\(NSUUID().uuidString)/image1.png") 
     storageRef.putData(data, metadata: nil, completion: { (metadata, error) in 
      // Handle it 
     } 
    } 

另外,還要確保你與火力地堡否則上傳authticated將失敗。檢查控制檯它會告訴你,如果認證失敗。

EDIT2

這應該做的伎倆。

func upload(image: UIImage, completion: @escaping (String?) ->()) { 
    guard let data = UIImagePNGRepresentation(image) else { return completion(nil)} 

    let storageRef = databaseStorage.child("images/\(NSUUID().uuidString)/image.png") 
    storageRef.putData(data, metadata: nil) { (metaData, error) in 
     if error != nil { 
      print(error?.localizedDescription ?? "Failed to upload image") 
     } else if metaData != nil && metaData?.downloadURL() != nil { 
      completion(metaData?.downloadURL()!.absoluteString) 
     } else { 
      completion(nil) 
     } 
    } 
} 

func upload() { 
    if imageView.image == nil && imageView1.image == nil { 
     return; 
    } 

    if let image = imageView.image { 
     upload(image: image, completion: { [weak self] (url) in 
      if let image1 = self?.imageView1.image { 
       self?.upload(image: image1, completion: { (url1) in 
        if url == nil && url1 == nil { 
         return 
        } else if url == nil { 
         self.ref?.child("Posts").childByAutoId().setValue(["Title": self.titleText.text, "Subtitle": self.subtitleText.text, "Article": self.articleText.text, "Author": self.authorText.text, "Date": self.dateText.text, "Tags": self.tagsText.text, "PostType": self.postType.text, "PostStyle": self.postStyle.text, "PostSize": self.postSize.text, "Download URL1": (url1)]) 
        } else if url1 == nil { 
         self.ref?.child("Posts").childByAutoId().setValue(["Title": self.titleText.text, "Subtitle": self.subtitleText.text, "Article": self.articleText.text, "Author": self.authorText.text, "Date": self.dateText.text, "Tags": self.tagsText.text, "PostType": self.postType.text, "PostStyle": self.postStyle.text, "PostSize": self.postSize.text, "Download URL": (url)]) 
        } else { 
         self.ref?.child("Posts").childByAutoId().setValue(["Title": self.titleText.text, "Subtitle": self.subtitleText.text, "Article": self.articleText.text, "Author": self.authorText.text, "Date": self.dateText.text, "Tags": self.tagsText.text, "PostType": self.postType.text, "PostStyle": self.postStyle.text, "PostSize": self.postSize.text, "Download URL": (url), "Download URL1" : (url1)]) 
        } 
       }) 
      } 
     }) 
    } else { 
     if let image1 = self.imageView1.image { 
      self.upload(image: image1, completion: { (url1) in 
       if (url1 == nil) { 
        return 
       } 

       self.ref?.child("Posts").childByAutoId().setValue(["Title": self.titleText.text, "Subtitle": self.subtitleText.text, "Article": self.articleText.text, "Author": self.authorText.text, "Date": self.dateText.text, "Tags": self.tagsText.text, "PostType": self.postType.text, "PostStyle": self.postStyle.text, "PostSize": self.postSize.text, "Download URL": (url)]) 

      }) 
     } 
    } 
} 
+0

所以我應該把數據庫部分兩次處理它的每個部分? – Riccardo

+0

如果'image'爲零或無法上傳,您是否只想上載'image1'? –

+0

我想一直上傳image1並上傳Image2(如果有的話) – Riccardo

相關問題