我已经构建了应用程序,它显示在书籍的 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-推荐答案 strong>
我很难用这些 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/
|