Firebase Storage 사용

Judy·2021년 6월 5일
0

Place마다 사진 저장이 필요하다.
Firestore엔 큰 용량을 저장할 수 없어 이미지나 동영상은 Storage에 업로드하여 사용한다고 한다.

Storage 사용하기

pod 'Firebase/Storage' 을 설치하고 Firebase에서 Storage를 시작하면 이용할 수 있다.

참조 만들기

파일을 가리키는 참조를 만들면 앱에 액세스 권한이 부여됩니다. 이러한 참조를 사용하여 데이터 업로드 또는 다운로드, 메타데이터 가져오기 또는 업데이트, 파일 삭제 등을 수행할 수 있습니다.
- IOS에서 Cloud Storage 참조 만들기 | Firebase -

참조는 클라우드의 파일을 가리키는 포인터같은 개념으로 파일을 업로드하고 불러오기 위해서 필요하다고 한다.

let storage = Storage.storage()
let ref = storage.reference().child(imageName)

child 안에 하위폴더를 지명할 수 있고 폴더가 없으면 파일이름이 된다.

이미지 업로드

func uploadImage(_ path: String, image: UIImage){
        var data = Data()
        data = image.jpegData(compressionQuality: 0.8)!
        let filePath = path
        let metaData = StorageMetadata()
        metaData.contentType = "image/jpeg"
        storageRef.child(filePath).putData(data, metadata: metaData){
            (metaData, error) in if let error = error{
                print(error.localizedDescription)
                return
            }else{
                print("Image successfully upload!")
            }
        }
    }

filePath로 지정한 이름이 이미지 파일 이름으로 저장된다.
메타데이터도 함께 저장 가능!


이미지 다운로드

  1. url로 다운받기
    func downloadImage(){
        let fileUrl = "gs://wethere-2935d.appspot.com"
        storage.reference(forURL: fileUrl).downloadURL { url, error in
            let data = NSData(contentsOf: url!)
            let downloadImg = UIImage(data: data! as Data)
            self.testImg.image = downloadImg
        }
    }

url은 내 Storage를 가리키는 위치 + 파일 이름을 하면 된다.

  1. 파일 이름으로 다운받기
    func downloadImage(){
        let islandRef = Storage.storage().reference().child("콤마")
        // Download in memory with a maximum allowed size of 1MB (1 * 1024 * 1024 bytes)
        islandRef.getData(maxSize: 1 * 1024 * 1024) { data, error in
          if let error = error {
            // Uh-oh, an error occurred!
          } else {
            // Data for "images/island.jpg" is returned
            self.testImg.image = UIImage(data: data!)
          }
        }
    }

메모리에 저장되며 이름을 직접 가리켜 다운받는다.

하지만....

Firestore에서 데이터를 받을 때와 마찬가지고 Tableview에 바로 업로드 되지 않는 문제가 발생 😭

일단 임시방편으로 새로고침하면 이미지가 뜨게 완성!
하지만 새로 업로드한 이미지는 안뜬다......

당겨서 새로고침하기

tableView.refreshControl = UIRefreshControl()    
tableView.refreshControl?.addTarget(self, action: #selector(pullToRefresh(_:)), for: .valueChanged)

viewDidLoad()에서 새로고침을 활성화하고

    @objc func pullToRefresh(_ refresh: UIRefreshControl){
        tableView.reloadData()
        refresh.endRefreshing()
    }

테이블뷰 재로드하고 새로고침을 멈추는 함수와 연결
쉽게 적용된다 👍

#소감#

TableView가 문제인건가ㅠㅠㅠ 왜 안되는건지, 왜 되는건지 모르겠다..

다음목표

Storage 이미지 삭제, 추가한 이미지 뜨게 하기, 다른 필드 추가

profile
iOS Developer

0개의 댓글