上载图像时Firebase for iOS错误:对象不存在
我正在尝试将图像上载到firebase存储,但在从照片库中选择图像后,在单击“选择”按钮之前,我遇到此错误: “创建类型未知的图像格式时出错” 此外,我得到“对象不存在”后,点击“上传”按钮 这是我的密码:上载图像时Firebase for iOS错误:对象不存在,ios,swift,firebase,firebase-storage,Ios,Swift,Firebase,Firebase Storage,我正在尝试将图像上载到firebase存储,但在从照片库中选择图像后,在单击“选择”按钮之前,我遇到此错误: “创建类型未知的图像格式时出错” 此外,我得到“对象不存在”后,点击“上传”按钮 这是我的密码: import UIKit import Firebase import FirebaseAuth import FirebaseStorage import FirebaseDatabase class uploadVC: UIViewController, UIImagePickerC
import UIKit
import Firebase
import FirebaseAuth
import FirebaseStorage
import FirebaseDatabase
class uploadVC: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
@IBOutlet weak var imgPost: UIImageView!
@IBOutlet weak var txtPost: UITextView!
var uuid = NSUUID().uuidString
override func viewDidLoad() {
super.viewDidLoad()
imgPost.isUserInteractionEnabled = true
let gestureRecognizer = UITapGestureRecognizer(target: self,
action: #selector(uploadVC.selectImage))
imgPost.addGestureRecognizer(gestureRecognizer)
}
func selectImage() {
let picker = UIImagePickerController()
picker.delegate = self
picker.sourceType = .photoLibrary
picker.allowsEditing = true
present(picker, animated: true, completion: nil)
}
func imagePickerController(_ picker: UIImagePickerController,
didFinishPickingMediaWithInfo info: [String : Any]) {
imgPost.image = info[UIImagePickerControllerEditedImage] as?
UIImage
self.dismiss(animated: true, completion: nil)
}
@IBAction func btnUpload(_ sender: Any) {
let mediaFolder = Storage().reference().child("media")
if let data = UIImageJPEGRepresentation(imgPost.image!, 0.5) {
mediaFolder.child("\(uuid).jpg").putData(data, metadata: nil,
completion: { (metadata, error) in
if error != nil {
let alert = UIAlertController(title: "Error", message:
error?.localizedDescription, preferredStyle:
UIAlertControllerStyle.alert)
let ok = UIAlertAction(title: "OK", style:
UIAlertActionStyle.cancel, handler: nil)
alert.addAction(ok)
self.present(alert, animated: true, completion: nil)
} else {
print(metadata?.downloadURL()?.absoluteString)
}
})
}
}
}
我刚弄明白它是怎么工作的。 根据带有swift 3的Firebase存储样本,存储首先需要验证 参考:
import UIKit
import Photos
import Firebase
import FirebaseAuth
import FirebaseStorage
import FirebaseDatabase
class uploadVC: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
@IBOutlet weak var imgPost: UIImageView!
@IBOutlet weak var txtPost: UITextView!
var uuid = NSUUID().uuidString
var storageRef: StorageReference!
var imageFile: URL?
var filePath: String?
override func viewDidLoad() {
super.viewDidLoad()
// [START configurestorage]
storageRef = Storage.storage().reference()
// [END configurestorage]
// [START storageauth]
// Using Cloud Storage for Firebase requires the user be authenticated. Here we are using
// anonymous authentication.
if Auth.auth().currentUser == nil {
Auth.auth().signInAnonymously(completion: { (user: User?, error: Error?) in
if let error = error {
let alert = UIAlertController(title: "Error", message: error.localizedDescription, preferredStyle: UIAlertControllerStyle.alert)
let ok = UIAlertAction(title: "OK", style: UIAlertActionStyle.cancel, handler: nil)
alert.addAction(ok)
self.present(alert, animated: true, completion: nil)
}
})
}
// [END storageauth]
imgPost.isUserInteractionEnabled = true
let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(uploadVC.selectImage))
imgPost.addGestureRecognizer(gestureRecognizer)
}
func selectImage() {
let picker = UIImagePickerController()
picker.delegate = self
picker.sourceType = .photoLibrary
picker.allowsEditing = true
present(picker, animated: true, completion: nil)
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
imgPost.image = info[UIImagePickerControllerEditedImage] as? UIImage
picker.dismiss(animated: true, completion:nil)
if #available(iOS 8.0, *), let referenceUrl = info[UIImagePickerControllerReferenceURL] as? URL {
let assets = PHAsset.fetchAssets(withALAssetURLs: [referenceUrl], options: nil)
let asset = assets.firstObject
asset?.requestContentEditingInput(with: nil, completionHandler: { (contentEditingInput, info) in
self.imageFile = contentEditingInput?.fullSizeImageURL
self.filePath = "media/" + "\(self.uuid).jpg"
})
}
}
@IBAction func btnUpload(_ sender: Any) {
// [START uploadimage]
self.storageRef.child(filePath!)
.putFile(from: imageFile!, metadata: nil) { (metadata, error) in
if let error = error {
let alert = UIAlertController(title: "Error", message: error.localizedDescription, preferredStyle: UIAlertControllerStyle.alert)
let ok = UIAlertAction(title: "OK", style: UIAlertActionStyle.cancel, handler: nil)
alert.addAction(ok)
self.present(alert, animated: true, completion: nil)
return
}
print(metadata?.downloadURL()?.absoluteString ?? "nothing")
}
// [END uploadimage]
}
}