2017-04-08 46 views
1

我通过.Camera将图片上传到Firebase存储。当我关闭应用程序并再次运行时,此图像不会保存在我的应用程序中。我知道我错过了一些东西。请告诉我应该补充什么。非常感谢! 这是我的代码:Firebase存储:上传的图片未保存在应用程序中

import UIKit 
import Firebase 
import FirebaseStorage 

class PicturesOfCoinsViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 

    @IBAction func saveButton(_ sender: UIButton) { 
     saveOneEuroCentImage() 
    } 

    @IBOutlet weak var oneEuroCentImage: UIImageView! 

    @IBAction func usePhotoButton(_ sender: UIButton) { 

     let picker = UIImagePickerController() 
     picker.sourceType = .camera 
     self.present(picker, animated: true, completion: nil) 
     picker.delegate = self 
    } 

    func saveOneEuroCentImage() { 

     let storageRef = FIRStorage.storage().reference().child("userPictures/oneEuroCent.jpg") 

     if let uploadData = UIImagePNGRepresentation(self.oneEuroCentImage.image!) { 

      storageRef.put(uploadData, metadata: nil) {(metadata, error) in 

       if error != nil { 
        print(error) 
        return 
       } 
      } 
     } 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
     oneEuroCentImage.image = info[UIImagePickerControllerOriginalImage] as? UIImage 
     picker.dismiss(animated: true, completion: nil) 
    } 
} 

enter image description here

回答

0

如果你想对你的应用程序中的图像的持久副本,那么你必须保存上传前的照片给你的应用程序文件的目录。从上面的代码中,您只能将其上传到Firebase中的云存储,但没有用于在本地保存图片的代码,这就是为什么当应用程序再次运行时它不存在。 我建议你为图像创建一个文档目录文件路径或url,然后保存它。

let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) 
let path = paths.first 
let imageFolderPath = path?.appending("MyFBImages") 
if !FileManager.default.fileExists(atPath: imageFolderPath!){ 
    do { 
     try FileManager.default.createDirectory(atPath: imageFolderPath!, withIntermediateDirectories: true, attributes: [:]) 
    } catch let error { 
     print(error.localizedDescription) 
    } 
} 
let imageFilePath = imageFolderPath?.appending("myImageName.jpg") 
let imageData = UIImageJPEGRepresentation(UIImage(), 1) 
do { 
    try imageData?.write(to: URL(fileURLWithPath: imageFilePath!)) 
} catch let error { 
    print(error.localizedDescription) 
} 

N/B:代码中的imageData可以从您在上传到Firebase之前创建的图像中获取。 这应该有助于您在本地保存图像。下次运行应用程序时,您可以通过从保存您保存的照片的url内容初始化UIImage来访问以前的图像。 我希望这可以帮助你。

+0

嗨!我添加了你的代码,但图像没有保存。我是新手,我请你帮忙。我认为我应该将UIImage =路径指向文档目录。但我不知道这是如何写的。 (我将你的代码添加到func saveOneEuroCentImage(){ – Stas

+0

好吧,我可以帮你,给我发邮件@ [email protected]。 –

相关问题