从Firebase上传和检索照片

时间:2016-12-24 13:24:57

标签: ios swift uitableview firebase photo

我已经构建并在UITableView数据库中显示应用程序。一切都很完美,我唯一需要的就是这本书的照片。要上传和检索照片我使用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 {

    }

有人可以写下并解释如何上传和检索这些照片吗?

1 个答案:

答案 0 :(得分:0)

我很难用这些var名称跟踪你正在做的事情。但是,我假设您从imagePickerController获得了UIImage

您需要在相应的文件中使用Firebase存储(pod 'Firebase/Storage')和import FirebaseStorage

以下是将UIImage上传到Firebase存储的步骤:

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()
    })

}

这是一个简单的功能,可以将UIImage上传到Firebase存储。请注意,您应该跟踪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)

    })
}