2017-04-08 69 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]。 –

相關問題