• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 从 Firebase 上传和检索照片

[复制链接]
菜鸟教程小白 发表于 2022-12-11 18:24:15 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap