2016-12-24 14 views
2

私は、本のUITableViewデータで表示されるアプリケーションを構築しています。すべてが完璧に動作します。唯一必要なのは本の写真です。写真をアップロードして取得するにはFirebaseを使用しますが、どのように写真でそれを行うのか分かりません。Firebaseから写真をアップロードして取得する

これは私が実装したものです:

@IBAction func ButtonScatta(_ sender: UIButton) { 

    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera) { 
     let imagePicker = UIImagePickerController() 
     imagePicker.delegate = self 
     imagePicker.sourceType = UIImagePickerControllerSourceType.camera; 
     imagePicker.allowsEditing = false 
     self.present(imagePicker, animated: true, completion: nil) 
    } 

} 

@IBAction func ButtonScegli(_ sender: UIButton) { 

    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.photoLibrary) { 
     let imagePicker = UIImagePickerController() 
     imagePicker.delegate = self 
     imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary; 
     imagePicker.allowsEditing = true 
     self.present(imagePicker, animated: true, completion: nil) 
    } 

} 

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [AnyHashable: Any]!) { 
    ImageView.image = image 
    self.dismiss(animated: true, completion: nil); 
} 

を、これはボタン「Vendi」の関数である:

if let user = FIRAuth.auth()?.currentUser{ 

     self.emailUser.text = user.email 
     let userID: String = user.uid 
     let x = libriArray.count 
     let y = String(x+1) 
     //let imageLibro: UIImage = self.ImageView.image! 
     let emailVenditore: String = self.emailUser.text! 
     let titoloLibro: String = self.TitoloText.text! 
     let codiceLibro: String = self.ISBNText.text! 
     let prezzoLibro: String = self.PrezzoText.text! 
     let edizioneLibro: String = self.EdizioneText.text! 
     let statoLibro: Bool = false 

     let Libro = ["titolo": titoloLibro, "codice": codiceLibro, "prezzo": prezzoLibro, "autore": edizioneLibro, "emailUser": emailVenditore, "userID": userID, "stato": statoLibro] as [String : Any] 

     let libriRef = ref.child(byAppendingPath: "Libri") 

     var libri = [y: Libro] 
     libriRef.childByAutoId().setValue(Libro) 

     self.dismiss(animated: true, completion: nil) 

    } else { 

    } 

誰かが書いて、アップロードを行うとの取得方法を説明することができますこの写真?

+0

私はあなたがFirebaseストレージに写真をアップロードしたいと仮定します、プロセスがここに文書化されている場合には:あなたがアップロードした画像をダウンロードするには

は、あなたがこのような何かを行うことができます。https:/ /firebase.google.com/docs/storage/ios/upload-filesまた、[iOS用Firebase codelab](https://codelabs.developers.google.com/codelabs/firebase-ios-swift/#8)には、画像のアップロード手順が記載されています。 –

答えて

0

私はあなたがそれらのvar名で正確にやっていることを追跡するのに苦労します。しかし、私はあなたがUIImageをimagePickerControllerから持っていると仮定しています。

Firebase Storage(pod 'Firebase/Storage')とimport FirebaseStorageがそれぞれのファイルに必要です。ここで

あなたはFirebaseストレージへUIImageをアップロードするために何ができるかです:

func uploadPhoto(_ image: UIImage, completionBlock: @escaping() -> Void) { 
    let ref = FIRStorage.storage().reference().child("myCustomPath").child("myFileName.jpg") // you may want to use UUID().uuidString + ".jpg" instead of "myFileName.jpg" if you want to upload multiple files with unique names 

    let meta = FIRStorageMetadata() 
    meta.contentType = "image/jpg" 

    // 0.8 here is the compression quality percentage 
    ref.put(UIImageJPEGRepresentation(image, 0.8)!, metadata: meta, completion: { (imageMeta, error) in 
     if error != nil { 
      // handle the error 
      return 
     } 

     // most likely required data 
     let downloadURL = imageMeta?.downloadURL()?.absoluteString  // needed to later download the image 
     let imagePath = imageMeta?.path  // needed if you want to be able to delete the image later 

     // optional data 
     let timeStamp = imageMeta?.timeCreated 
     let size = imageMeta?.size 

     // ----- should save these data in your database at this point ----- 

     completionBlock() 
    }) 

} 

これはFirebaseストレージへUIImageをアップロードすることができます簡単な関数です。 downloadURLとアップロードするすべての画像のパスを把握する必要があります。アップロード後にデータベースに保存することができます。

func retrieveImage(_ URL: String, completionBlock: @escaping (UIImage) -> Void) { 
    let ref = FIRStorage.storage().reference(forURL: URL) 

    // max download size limit is 10Mb in this case 
    ref.data(withMaxSize: 10 * 1024 * 1024, completion: { retrievedData, error in 
     if error != nil { 
      // handle the error 
      return 
     } 

     let image = UIImage(data: retrievedData!)! 

     completionBlock(image) 

    }) 
} 
関連する問題