OGeek|极客世界-中国程序员成长平台

标题: ios - 从 Firebase 上传和检索照片 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-11 18:24
标题: ios - 从 Firebase 上传和检索照片

我已经构建了应用程序,它显示在书籍的 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 {

    }

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



Best Answer-推荐答案


我很难用这些 var 名称准确跟踪您在做什么。但是,我假设您从 imagePickerController 获得了 UIImage

您将需要 Firebase Storage (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)

    })
}

关于ios - 从 Firebase 上传和检索照片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41313669/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (https://ogeek.cn/) Powered by Discuz! X3.4