Firebase는 클라우드 기반의 개발 플랫폼으로, 다양한 기능을 제공합니다. Firebase 스토리지는 이 중 하나로, 사용자들이 파일을 업로드하고 다운로드할 수 있는 기능을 제공합니다. 이번 블로그에서는 Firebase 스토리지를 활용하여 파일 업로드 및 다운로드 기능을 구현하는 방법에 대해 알아보겠습니다.
Firebase 프로젝트 설정
먼저 Firebase 프로젝트를 생성하고 해당 프로젝트에 Firebase 스토리지를 추가해야 합니다. Firebase 콘솔(https://console.firebase.google.com/)에 접속하여 새로운 프로젝트를 생성하고, Firebase 스토리지를 활성화합니다.
Firebase SDK 설정
Firebase SDK는 Firebase 스토리지와의 통신을 도와주는 라이브러리입니다. Cocoapods를 통해 Firebase SDK를 설치할 수 있습니다. 프로젝트 폴더에서 Podfile
을 열고 아래와 같이 Firebase SDK를 추가합니다.
pod 'Firebase/Storage'
저장 후 터미널에서 pod install
명령어로 Firebase SDK를 설치합니다. 이후 Xcode에서 .xcworkspace
파일을 열어 Firebase SDK를 사용할 수 있습니다.
파일 업로드 구현
파일 업로드를 위해서는 우선 사용자로부터 파일을 선택받아야 합니다. UIImagePickerController
를 사용하여 파일을 선택할 수 있습니다. 다음은 파일 선택 및 업로드하는 코드 예제입니다.
import UIKit
import FirebaseStorage
class UploadViewController: UIViewController, UIImagePickerControllerDelegate & UINavigationControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func uploadButtonTapped(_ sender: UIButton) {
let imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = .photoLibrary
present(imagePicker, animated: true, completion: nil)
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let pickedImage = info[.originalImage] as? UIImage {
uploadImageToFirebase(image: pickedImage)
}
dismiss(animated: true, completion: nil)
}
func uploadImageToFirebase(image: UIImage) {
guard let imageData = image.jpegData(compressionQuality: 0.8) else { return }
let storageRef = Storage.storage().reference()
let timestamp = NSDate().timeIntervalSince1970
let imageRef = storageRef.child("\(timestamp).jpg")
let uploadTask = imageRef.putData(imageData, metadata: nil) { (metadata, error) in
guard let metadata = metadata else {
// handle error
return
}
// 업로드 성공 시, 다운로드 URL을 가져옵니다.
imageRef.downloadURL { (url, error) in
guard let downloadURL = url else {
// handle error
return
}
// 다운로드 URL을 가져오면 처리할 로직을 작성합니다.
print(downloadURL.absoluteString)
}
}
}
}
위의 예제 코드에서는 UIImagePickerController
를 사용하여 이미지 파일을 선택하고, 선택된 이미지를 Firebase 스토리지에 업로드합니다. 업로드가 성공하면 이미지의 다운로드 URL을 가져와 처리할 수 있습니다.
파일 다운로드 구현
파일 다운로드를 위해서는 Firebase 스토리지에 저장된 파일의 다운로드 URL이 필요합니다. 이전에 업로드한 파일의 다운로드 URL을 가지고 있다면, 아래와 같은 코드로 다운로드할 수 있습니다.
import UIKit
import FirebaseStorage
class DownloadViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func downloadButtonTapped(_ sender: UIButton) {
let storageRef = Storage.storage().reference()
let imageRef = storageRef.child("image.jpg")
imageRef.downloadURL { (url, error) in
guard let downloadURL = url else {
// handle error
return
}
// 다운로드 URL을 이용하여 파일을 다운로드하는 로직을 작성합니다.
URLSession.shared.dataTask(with: downloadURL) { (data, response, error) in
guard let imageData = data, error == nil else {
// handle error
return
}
// 다운로드 받은 데이터를 이용하여 UI를 갱신하거나 로컬에 저장하는 등의 로직을 작성합니다.
let image = UIImage(data: imageData)
DispatchQueue.main.async {
// UI 갱신 로직
}
}.resume()
}
}
}
위의 예제 코드에서는 downloadURL
메소드를 이용하여 파일의 다운로드 URL을 가져오고, 가져온 URL을 이용하여 파일을 다운로드합니다. 다운로드한 데이터를 적절하게 활용하여 UI를 갱신하거나 로컬에 저장할 수 있습니다.
결론
Firebase 스토리지를 활용한 파일 업로드 및 다운로드 기능 구현 방법에 대해 알아보았습니다. Firebase 스토리지는 안정적이고 편리한 파일 관리 기능을 제공하므로, 이를 활용하여 다양한 파일 관련 기능을 개발할 수 있습니다. 더 자세한 내용은 Firebase 공식 문서를 참고하시기 바랍니다.
참고 자료:
- Firebase 공식 문서: https://firebase.google.com/docs/storage