image firebase swift2

image - Swift2 recuperando imágenes de Firebase



(2)

En vez de

let decodedData = NSData(base64EncodedString: self.base64String as String, options: NSDataBase64DecodingOptions())

intente agregar IgnoreUnknownCharacters

NSDataBase64DecodingOptions.IgnoreUnknownCharacters

Ejemplo de uso: codificar un jpg, almacenar y leer desde firebase

codificar y escribir nuestra nave estelar favorita

if let image = NSImage(named:"Enterprise.jpeg") { let imageData = image.TIFFRepresentation let base64String = imageData!.base64EncodedStringWithOptions(.Encoding64CharacterLineLength) let imageRef = myRootRef.childByAppendingPath("image_path") imageRef.setValue(base64String)

leer y decodificar

imageRef.observeEventType(.Value, withBlock: { snapshot in let base64EncodedString = snapshot.value let imageData = NSData(base64EncodedString: base64EncodedString as! String, options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters) let decodedImage = NSImage(data:imageData!) self.myImageView.image = decodedImage }, withCancelBlock: { error in print(error.description) })

EDITAR 2019_05_17

Actualización a Swift 5 y Firebase 6

func writeImage() { if let image = NSImage(named:"Enterprise.jpg") { let imageData = image.tiffRepresentation if let base64String = imageData?.base64EncodedString() { let imageRef = self.ref.child("image_path") imageRef.setValue(base64String) } } } func readImage() { let imageRef = self.ref.child("image_path") imageRef.observeSingleEvent(of: .value, with: { snapshot in let base64EncodedString = snapshot.value as! String let imageData = Data(base64Encoded: base64EncodedString, options: Data.Base64DecodingOptions.ignoreUnknownCharacters)! let decodedImage = NSImage(data: imageData) self.myImageView.image = decodedImage }) }

Estoy tratando de leer / mostrar una imagen de Firebase. Primero estoy codificando la imagen y luego publicando esta cadena codificada en Firebase. Esto funciona bien Cuando intento decodificar la cadena codificada de Firebase y convertirla en una imagen, obtengo una excepción de valor nulo.

Así es como guardo la imagen en Firebase

var base64String: NSString! func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) { self.dismissViewControllerAnimated(true, completion: nil) imageToPost.image = image var uploadImage = image as! UIImage var imageData = UIImagePNGRepresentation(uploadImage)! self.base64String = imageData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength) let ref = Firebase(url: "https://XXX.firebaseio.com") var quoteString = ["string": self.base64String] var usersRef = ref.childByAppendingPath("goalImages") var users = ["image": quoteString] usersRef.setValue(users) displayAlert("Image Posted", message: "Your image has been successfully posted!") }

Así es como estoy tratando de leer la imagen de Firebase

// ViewController.swift import UIKit import Firebase class ViewController: UIViewController { @IBOutlet weak var image: UIImageView! var base64String: NSString! @IBAction func buttonClicked(sender: AnyObject) { sender.setTitle("/(sender.tag)", forState: UIControlState.Normal) } override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. let ref = Firebase(url: "https://XXX.firebaseio.com/goalImages/image/string") ref.observeEventType(.Value, withBlock: { snapshot in self.base64String = snapshot.value as! NSString let decodedData = NSData(base64EncodedString: self.base64String as String, options: NSDataBase64DecodingOptions()) //Next line is giving the error var decodedImage = UIImage(data: decodedData!) self.image.image = decodedImage }, withCancelBlock: { error in print(error.description) }) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }

El error dice: "error fatal: inesperadamente encontrado nulo al desenvolver un valor opcional"; decodedData es nulo. ¿Alguien podría explicar qué está yendo mal?


Ingeniero de Firebase aquí:

Recomiendo usar la nueva API de Firebase Storage para subir imágenes a Firebase. Es fácil de usar, de bajo costo y está respaldado por Google Cloud Storage a gran escala.

Puede cargar desde NSData o un NSURL apunta a un archivo local (mostraré NSData , pero el principio es el mismo):

// Data in memory let data: NSData = ... // Create a reference to the file you want to upload let riversRef = storageRef.child("images/rivers.jpg") // Upload the file to the path "images/rivers.jpg" let uploadTask = riversRef.putData(data, metadata: nil) { metadata, error in if (error != nil) { // Uh-oh, an error occurred! } else { // Metadata contains file metadata such as size, content-type, and download URL. let downloadURL = metadata!.downloadURL // This can be stored in the Firebase Realtime Database // It can also be used by image loading libraries like SDWebImage } }

Incluso puede pausar y reanudar las cargas, y puede monitorear fácilmente las cargas para ver el progreso:

// Upload data let uploadTask = storageRef.putData(...) // Add a progress observer to an upload task uploadTask.observeStatus(.Progress) { snapshot in // Upload reported progress if let progress = snapshot.progress { let percentComplete = 100.0 * Double(progress.completedUnitCount) / Double(progress.totalUnitCount) } }