투케이2K

413. (ios/swift5) [Firebase Storage] 파이어베이스 스토리지 버킷에 파일 저장 수행 - File Upload 본문

IOS

413. (ios/swift5) [Firebase Storage] 파이어베이스 스토리지 버킷에 파일 저장 수행 - File Upload

투케이2K 2024. 3. 8. 20:25

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT5

 
 

[소스 코드]

import Foundation
import UIKit
// ----------------------------------
// MARK: - [파이어베이스 라이브러리]
// ----------------------------------
import Firebase
import FirebaseStorage
// ----------------------------------

class C_FirebaseStorageService {



    /**
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * TODO [클래스 설명]
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * 1. 파이어베이스 Storage 스토리지 관리 클래스
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * 2. 참고 사이트 (기본 Storage 설명) : https://firebase.google.com/docs/storage?hl=ko&_gl=1*1ylydtb*_up*MQ..*_ga*MTk1MzY3OTg4OS4xNzA5NzkyODU1*_ga_CW55HF8NVT*MTcwOTc5Mjg1NS4xLjAuMTcwOTc5Mjg1NS4wLjAuMA..
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * 참고 사이트 (Storage 비용 설명) : https://firebase.google.com/pricing?hl=ko
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * 4. 참고 사이트 (Storage 생성 방법) : https://blog.naver.com/kkh0977/223376155889
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * 5. TODO 서비스 적용 방법 :
     *
     *  - Ios 에서 사전 파일 저장소 읽기 및 쓰기 권한 필요
     *  - 파이어베이스 콘솔 프로젝트 생성
     *  - GoogleService-Info.plist 파일 프로젝트에 추가
     *  - 파이어베이스 의존성 추가 : SPM 및 코코아팟에서 Firebase Storage 추가
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * */





    /**
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * //  TODO [빠른 로직 찾기 : 주석 로직 찾기]
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * // [SEARCH FAST] : [Observable] : [Save File] : 특정 파일 Storage 에 저장
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * // [SEARCH FAST] : [Observable] : [Get File List] : Storage 에 저장 된 파일 리스트 확인
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * // [SEARCH FAST] : [Observable] : [File DownLoad Url] : 특정 파일 다운 로드 URL 확인
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     *
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     *
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * */
    
    
    
    
    
    // -----------------------------------------------------------------------------------------
    // MARK: - [전역 변수 선언]
    // -----------------------------------------------------------------------------------------
    private static let ACTIVITY_NAME = "C_FirebaseStorageService"





    // -----------------------------------------------------------------------------------------
    // MARK: - [SEARCH FAST] : [Observable] : [Save File] : 특정 파일 Storage 에 저장
    // -----------------------------------------------------------------------------------------
    func observableStorageSaveFile(filePath:URL, fileType:String, fileName:String, completion: @escaping (Bool)->()) {
        
        /*
        // -----------------------------------------
        [observableStorageSaveFile 메소드 설명]
        // -----------------------------------------
        1. 파이어베이스 스토리지에 특정 파일 저장 실시
        // -----------------------------------------
        2. 호출 방법 :
         
         // [앱 내부에 저장 된 파일 저장소 경로 지정]
         let filePath = "test"
         guard let filePath = Bundle.main.path(forResource: filePath, ofType: "txt")
         else {
             self.showAlert(
                 type: 0,
                 tittle: S_FinalMsg.AL_TITLE_ERRPR, content: "웹뷰 로드에 정의 되지 않은 타입 입니다 (html file path is nil)",
                 okBtb: S_FinalMsg.AL_OK, noBtn: "")
             return
         }
         let urlFile = URL(fileURLWithPath: filePath)
         
         // [파이어베이스 저장 경로 및 파일 명칭 지정]
         let fileType = "text/plain"
         let fileName = "LOG.txt"
         
         C_FirebaseStorageService().observableStorageSaveFile(filePath:urlFile, fileType:fileType, fileName:fileName){(result) in
             
             S_Log._F_(description: "파이어베이스 파일 저장 결과 확인", data: ["\(result)"])
             
         }
         
        // -----------------------------------------
        3. 파일 콘텐츠 타입 참고 :
         
         [오디오 타입]
         audio/mpeg
         audio/x-ms-wma
         
         [텍스트 타입]
         text/css
         text/html
         text/plain
         text/xml
         
         [이미지 타입]
         image/jpeg
         image/png
        // -----------------------------------------
        */
        
        // [메인 큐에서 비동기 방식 실행 : UI 동작 실시]
        DispatchQueue.main.async {
            S_Log._F_(description: C_FirebaseStorageService.ACTIVITY_NAME + " : [Firebase] [Storage] 파일 저장 수행", data: [
                "filePath :: \(filePath.absoluteString)",
                "fileType :: \(fileType)",
                "fileName :: \(fileName)"
            ])
            
            
            // [널 체크]
            if C_Util().stringNotNull(str: filePath.absoluteString) == true && C_Util().stringNotNull(str: fileType) == true && C_Util().stringNotNull(str: fileName) == true {
                
                // [Storage 인스턴스 지정]
                let storage = Storage.storage() //인스턴스 생성
                
                // [Storage 메타 데이터 선언]
                let metaData = StorageMetadata()
                
                // [데이터 타입 지정]
                metaData.contentType = "\(fileType)"
                
                // [Storage 에 파일 업로드]
                storage.reference().child("/" + fileName).putFile(from: filePath, metadata: metaData){
                    (metaData,error) in if let error = error { //실패
                        S_Log._F_(description: C_FirebaseStorageService.ACTIVITY_NAME + " : [Firebase] [Storage] [Error] - 파일 저장 에러", data: [
                            "ERROR :: \(error.localizedDescription)"
                        ])
                        
                        // [콜백 반환]
                        completion(false)
                        
                        return
                    }else{ //성공
                        S_Log._F_(description: C_FirebaseStorageService.ACTIVITY_NAME + " : [Firebase] [Storage] [Success] - 파일 저장 성공", data: nil)
                        
                        // [콜백 반환]
                        completion(true)
                    }
                }
            }
            else {
                S_Log._F_(description: C_FirebaseStorageService.ACTIVITY_NAME + " : [Firebase] [Storage] [Error] - 파일 저장 에러", data: [
                    "ERROR :: Input Data Is Null"
                ])
                
                // [콜백 반환]
                completion(false)
            }
            
        }
    }

    
} // [클래스 종료]

[결과 출력]

 

 

반응형
Comments