Place마다 사진 저장이 필요하다.
Firestore엔 큰 용량을 저장할 수 없어 이미지나 동영상은 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로 지정한 이름이 이미지 파일 이름으로 저장된다.
메타데이터도 함께 저장 가능!
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를 가리키는 위치 + 파일 이름을 하면 된다.
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 이미지 삭제, 추가한 이미지 뜨게 하기, 다른 필드 추가