swift:从照片库中拍摄图片并上传到firebase
问题描述:
到目前为止我没有找到适合自己的作品..我尝试将我的照片库(最近拍摄的照片保存在库中)中的图片上传到Firebase存储。下面swift:从照片库中拍摄图片并上传到firebase
代码是图像的保存和增加它的图书馆:
// MARK: - Save image
@IBAction func savePhoto(_ sender: Any) {
UIImageWriteToSavedPhotosAlbum(licensePhoto.image!, self, #selector(image(_:didFinishSavingWithError:contextInfo:)), nil)
}
//MARK: - Add image to Library
func image(_ image: UIImage, didFinishSavingWithError error: Error?, contextInfo: UnsafeRawPointer) {
if let error = error {
// we got back an error!
let alert = UIAlertController(title: "Error", message: error.localizedDescription, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default))
present(alert, animated: true)
} else {
let alert = UIAlertController(title: "Saved!", message: "Image saved successfully", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default))
present(alert, animated: true)
}
}
任何帮助,将不胜感激。
我曾尝试下面的代码,只给我的错误: 致命错误:意外发现零而展开报名后一个可选值!:
// . . . upload license photo to firebase
var data = NSData()
data = UIImageJPEGRepresentation(licensePhoto.image!, 0.8)! as NSData
// set upload path
let filePath = "\(FIRAuth.auth()!.currentUser!.uid)/\("userPhoto")"
let metaData = FIRStorageMetadata()
metaData.contentType = "image/jpg"
DataService.Instance.storageRef.child(filePath).put(data as Data, metadata: metaData){(metaData,error) in
if let error = error {
print(error.localizedDescription)
return
}else{
//store downloadURL
let downloadURL = metaData!.downloadURL()!.absoluteString
//store downloadURL at database
DataService.Instance.dbRef.child("users").child(FIRAuth.auth()!.currentUser!.uid).updateChildValues(["userPhoto": downloadURL])
}
}
}
答
我找到了答案:
// . . . upload license photo to firebase
let storage = FIRStorage.storage().reference()
let tempImgRef = storage.child("tmpDir/tmpImage.jpg")
var data: NSData = NSData()
data = UIImageJPEGRepresentation(licensePhoto.image!, 0.8)! as NSData
let metaData = FIRStorageMetadata()
metaData.contentType = "image/jpeg"
tempImgRef.put(data as Data, metadata: metaData, completion: { (metaData, error) in
if error == nil {
print("success")
} else {
print(error?.localizedDescription as Any)
}
})
}
请将您的代码添加为文本而不是图片,否则复制和修改它会困难得多。 – EmilioPelaez
对不起,我会编辑它。谢谢 – LizG