我已经构建并在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 {
}
有人可以写下并解释如何上传和检索这些照片吗?
答案 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)
})
}