我想在我的iOS應用程序中製作一個按鈕,當用戶點擊它時,他/她得到兩個選擇:從相冊中選擇一張照片或從相機拍攝照片到Firebase數據庫。將圖片庫或相機中的圖片上傳到Firebase存儲(Swift)
爲了使這成爲可能,我必須遵循什麼樣的結構?將圖片上傳到Firebase數據庫!
我想在我的iOS應用程序中製作一個按鈕,當用戶點擊它時,他/她得到兩個選擇:從相冊中選擇一張照片或從相機拍攝照片到Firebase數據庫。將圖片庫或相機中的圖片上傳到Firebase存儲(Swift)
爲了使這成爲可能,我必須遵循什麼樣的結構?將圖片上傳到Firebase數據庫!
確保你有你的第一個視圖控制器在連接到導航控制器故事板
class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate{
var imagePicker : UIImagePickerController = UIImagePickerController()
override func viewDidLoad() {
super.viewDidLoad()
imagePicker.delegate = self
}
//============================================================================================================================================================
//////
//
//PROFILE PICTURE FUNCTIONS
//
/////
@IBAction func addPictureBtnAction(sender: UIButton) {
addPictureBtn.enabled = false
let alertController : UIAlertController = UIAlertController(title: "Title", message: "Select Camera or Photo Library", preferredStyle: .ActionSheet)
let cameraAction : UIAlertAction = UIAlertAction(title: "Camera", style: .Default, handler: {(cameraAction) in
print("camera Selected...")
if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera) == true {
self.imagePicker.sourceType = .Camera
self.present()
}else{
self.presentViewController(self.showAlert("Title", Message: "Camera is not available on this Device or accesibility has been revoked!"), animated: true, completion: nil)
}
})
let libraryAction : UIAlertAction = UIAlertAction(title: "Photo Library", style: .Default, handler: {(libraryAction) in
print("Photo library selected....")
if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.PhotoLibrary) == true {
self.imagePicker.sourceType = .PhotoLibrary
self.present()
}else{
self.presentViewController(self.showAlert("Title", Message: "Photo Library is not available on this Device or accesibility has been revoked!"), animated: true, completion: nil)
}
})
let cancelAction : UIAlertAction = UIAlertAction(title: "Cancel", style: .Cancel , handler: {(cancelActn) in
print("Cancel action was pressed")
})
alertController.addAction(cameraAction)
alertController.addAction(libraryAction)
alertController.addAction(cancelAction)
alertController.popoverPresentationController?.sourceView = view
alertController.popoverPresentationController?.sourceRect = view.frame
self.presentViewController(alertController, animated: true, completion: nil)
}
func present(){
self.presentViewController(imagePicker, animated: true, completion: nil)
}
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
print("info of the pic reached :\(info) ")
self.imagePicker.dismissViewControllerAnimated(true, completion: nil)
}
//Show Alert
func showAlert(Title : String!, Message : String!) -> UIAlertController {
let alertController : UIAlertController = UIAlertController(title: Title, message: Message, preferredStyle: .Alert)
let okAction : UIAlertAction = UIAlertAction(title: "Ok", style: .Default) { (alert) in
print("User pressed ok function")
}
alertController.addAction(okAction)
alertController.popoverPresentationController?.sourceView = view
alertController.popoverPresentationController?.sourceRect = view.frame
return alertController
}
}
火力地堡功能: -
func profilePictureUploading(infoOnThePicture : [String : AnyObject],completionBlock : (()->Void)) {
if let referenceUrl = infoOnThePicture[UIImagePickerControllerReferenceURL] {
print(referenceUrl)
let assets = PHAsset.fetchAssetsWithALAssetURLs([referenceUrl as! NSURL], options: nil)
print(assets)
let asset = assets.firstObject
print(asset)
asset?.requestContentEditingInputWithOptions(nil, completionHandler: { (ContentEditingInput, infoOfThePicture) in
let imageFile = ContentEditingInput?.fullSizeImageURL
print("imagefile : \(imageFile)")
let filePath = FIRAuth.auth()!.currentUser!.uid + "/\(Int(NSDate.timeIntervalSinceReferenceDate() * 1000))/\(imageFile!.lastPathComponent!)"
print("filePath : \(filePath)")
FIRControllerClass.storageRef.child("ProfilePictures").child(filePath).putFile(imageFile!, metadata: nil, completion: {
(metadata, error) in
if error != nil{
print("error in uploading image : \(error)")
self.delegate.firShowAlert("Error Uploading Your Profile Pic", Message: "Please check your network!")
}
else{
print("metadata in : \(metadata!)")
print(metadata?.downloadURL())
print("The pic has been uploaded")
print("download url : \(metadata?.downloadURL())")
self.uploadSuccess(metadata!, storagePath: filePath)
completionBlock()
}
})
})
}else{
print("No reference URL found!")
}
}
//Saving the path in your core data to search through later when you retrieve your picture from DB
func uploadSuccess(metadata : FIRStorageMetadata , storagePath : String)
{
print("upload succeded!")
print(storagePath)
NSUserDefaults.standardUserDefaults().setObject(storagePath, forKey: "storagePath.\((FIRAuth.auth()?.currentUser?.uid)!)")
NSUserDefaults.standardUserDefaults().synchronize()
}
PS: - 此回購環節可能在將來有用:) https://github.com/firebase/quickstart-ios(firebase官方樣本)
firebase如何參與您的問題? – EBDOKUM
@ EBDOKUM因爲我想將所選或拍攝的圖像保存到firebase中! – Mariah
@ EBDOKUM你明白我的意思了嗎? – Mariah