【Swift】Firebaseに画像を保存/画像を読み込む

 

完成図

 

「操作画面」

f:id:nekokichi_yos2:20190204110834p:plain

 

「保存されているデータ」

f:id:nekokichi_yos2:20190204110838p:plain

 

解説

 

Firebaseから画像を取得するには、2つの方法がある。

  • Storageの参照で取得
  • FiirebaseUIで取得

(参考ページ)

 

firebase.google.com

 

前者は一般的な方法だがクロージャやエラーハンドリングのせいでコードが長くなりやすい。

 

今回は、たった3行でFirebaseから画像をダウンロードする方法を紹介する。
(ついでに画像を保存する方法も載せておく。)

 

(参考ページ)

firebase.google.com

 

「アップロード時のファイル名について」

 

画像やファイルをアップロードするとき、

  • Storage.storage.reference(forURL: ストレージのURL).child(ファイル名(階層名))

で保存する。

 

もし好きなファイル名にしたいなら、

child(命名したい文字列)

 

ランダムに命名したいなら、

childByAutoId()

 

ソースコード

 

import UIKit
import Firebase
import FirebaseUI

class FirebaseStorage: UIViewController {
    
    @IBOutlet weak var imageView: UIImageView!
    
    @IBAction func uploadImage(_ sender: Any) {
        uploadImage()
    }
    
    @IBAction func loadImage(_ sender: Any) {
        loadImage()
    }
    
    //Storageに画像を保存する
    func uploadImage() {
        //Storageの参照("Item"という名前で保存)
        let storageref = Storage.storage().reference(forURL: "gs://sample-e206e.appspot.com").child("Item")
        //画像
        let image = UIImage(named: "猫.png")
        //imageをNSDataに変換
        let data = image!.jpegData(compressionQuality: 1.0)! as NSData
        //Storageに保存
        storageref.putData(data as Data, metadata: nil) { (data, error) in
            if error != nil {
                return
            }
        }
        self.dismiss(animated: true, completion: nil)
    }
    
    //取得したURLを基にStorageから画像を取得する
    func loadImage() {
        //StorageのURLを参照
        let storageref = Storage.storage().reference(forURL: "gs://sample-e206e.appspot.com").child("Item")
        //画像をセット
        imageView.sd_setImage(with: storageref)
    }

}