[swift] Swift FirebaseUI를 사용하여 파일 업로드 및 다운로드 구현하기

Firebase는 웹 및 모바일 애플리케이션 개발을 위한 클라우드 기반 플랫폼으로, 데이터베이스, 인증, 스토리지 등 다양한 기능을 제공합니다. FirebaseUI는 Firebase의 인증 및 UI 기능을 쉽게 구현할 수 있는 라이브러리입니다.

이번 글에서는 Swift FirebaseUI를 사용하여 파일 업로드 및 다운로드 기능을 구현하는 방법에 대해 알아보겠습니다.

FirebaseUI 설치하기

FirebaseUI를 사용하기 위해 먼저 Cocoapods를 통해 FirebaseUI를 프로젝트에 추가해야 합니다. Podfile에 다음 내용을 추가해주세요.

pod 'FirebaseUI/Storage'

그리고 터미널을 열고 프로젝트 디렉토리로 이동한 뒤, 다음 명령어를 실행하여 FirebaseUI를 설치합니다.

pod install

파일 업로드 구현하기

FirebaseUI를 사용하여 파일 업로드 기능을 구현하는 방법은 간단합니다. 먼저, FirebaseUI를 초기화하고 Storage 참조를 가져와야 합니다.

import Firebase
import FirebaseUI

...

// FirebaseUI 초기화
FUIStorage.defaultStorage().config.storageBucket = "your-bucket"

// Storage 참조 가져오기
let storageRef = Storage.storage().reference()

이제 사용자가 파일을 선택하고 업로드 버튼을 클릭할 때의 동작을 구현해보겠습니다. 아래의 코드를 참고하세요.

let picker = UIImagePickerController()
picker.delegate = self
picker.sourceType = .photoLibrary
present(picker, animated: true, completion: nil)
extension ViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        guard let selectedImage = info[.originalImage] as? UIImage else {
            dismiss(animated: true, completion: nil)
            return
        }
        
        let imagePath = "\(Int(Date.timeIntervalSinceReferenceDate * 1000)).jpg"
        let imageRef = storageRef.child(imagePath)
        
        if let imageData = selectedImage.jpegData(compressionQuality: 0.8) {
            let metadata = StorageMetadata()
            metadata.contentType = "image/jpeg"
            
            let uploadTask = imageRef.putData(imageData, metadata: metadata) { (metadata, error) in
                guard let metadata = metadata else {
                    print("Error uploading image: \(error?.localizedDescription)")
                    return
                }
                
                // 업로드 완료 후 동작 구현
                print("Uploaded image URL: \(metadata.downloadURL()?.absoluteString)")
            }
            
            uploadTask.observe(.progress) { (snapshot) in
                // 업로드 진행 상황을 알 수 있는 동작 구현
                let percentComplete = 100.0 * Double(snapshot.progress!.completedUnitCount) / Double(snapshot.progress!.totalUnitCount)
                print("Upload progress: \(percentComplete)%")
            }
            
            dismiss(animated: true, completion: nil)
        }
    }
}

위의 코드에서는 사용자가 이미지를 선택하면 선택한 이미지를 Firebase Storage에 업로드합니다. 업로드가 완료되면 업로드된 이미지의 다운로드 URL을 출력합니다.

파일 다운로드 구현하기

FirebaseUI를 사용하여 파일 다운로드 기능을 구현하는 방법도 간단합니다. 다운로드할 파일의 Storage 참조를 가져온 뒤, 다운로드 URL을 사용하여 파일을 다운로드할 수 있습니다.

let fileRef = storageRef.child("images/image.jpg")

fileRef.downloadURL { (url, error) in
    if let downloadURL = url {
        // 다운로드 URL 이용하여 파일 다운로드
        URLSession.shared.dataTask(with: downloadURL) { (data, response, error) in
            if let data = data {
                let image = UIImage(data: data)
                // 다운로드한 파일을 이용한 동작 구현
            }
        }.resume()
    }
}

위의 코드에서는 Firebase Storage의 images/image.jpg 경로에 있는 파일의 다운로드 URL을 가져옵니다. 가져온 다운로드 URL을 사용하여 URLSession을 이용하여 파일을 다운로드합니다. 다운로드한 파일을 이용하여 원하는 동작을 구현하면 됩니다.

마무리

Swift FirebaseUI를 사용하여 파일 업로드 및 다운로드 기능을 구현하는 방법을 알아보았습니다. FirebaseUI를 이용하면 간단한 코드로 Firebase의 스토리지 기능을 활용할 수 있습니다. 추가적인 사용법은 FirebaseUI for iOS 문서를 참고하시기 바랍니다.