투케이2K

415. (ios/swift5) [Firebase Storage] 파이어베이스 스토리지 에 저장 된 특정 파일 다운로드 URL 주소 확인 - File DownLoad Url 본문

IOS

415. (ios/swift5) [Firebase Storage] 파이어베이스 스토리지 에 저장 된 특정 파일 다운로드 URL 주소 확인 - File DownLoad Url

투케이2K 2024. 3. 9. 09:03

[개발 환경 설정]

개발 툴 : 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..
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * 3.  참고 사이트 (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 추가
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * */
    
    
    
    
    
    // -----------------------------------------------------------------------------------------
    // MARK: - [전역 변수 선언]
    // -----------------------------------------------------------------------------------------
    private static let ACTIVITY_NAME = "C_FirebaseStorageService"





    // -----------------------------------------------------------------------------------------
    // MARK: - [SEARCH FAST] : [Observable] : [File DownLoad Url] : 특정 파일 다운 로드 URL 확인
    // -----------------------------------------------------------------------------------------
    func observableFileDownUrl(filePath:String, fileName:String, completion: @escaping (String)->()) {
        
        /*
        // -----------------------------------------
        [observableFileDownUrl 메소드 설명]
        // -----------------------------------------
        1. 파이어베이스 특정 파일 다운 로드 URL 확인
        // -----------------------------------------
        2. 호출 방법 :
         
         // [파이어베이스 저장 경로 지정]
         let filePath = "/"
         let fileName = "LOG.txt"
         
         // [메소드 호출]
         C_FirebaseStorageService().observableFileDownUrl(filePath:filePath, fileName:fileName){(result) in
             
             S_Log._F_(description: "파이어베이스 특정 파일 다운 로드 URL 확인", data: ["\(result)"])
             
         }
         
        // -----------------------------------------
        */
        
        // [메인 큐에서 비동기 방식 실행 : UI 동작 실시]
        DispatchQueue.main.async {
            S_Log._F_(description: C_FirebaseStorageService.ACTIVITY_NAME + " : [Firebase] [Storage] 특정 파일 다운 로드 URL 확인 수행", data: [
                "filePath :: \(filePath)",
                "fileName :: \(fileName)"
            ])
            
            
            // [널 체크]
            if C_Util().stringNotNull(str: filePath) == true && C_Util().stringNotNull(str: fileName) == true {
                
                // [Storage 인스턴스 지정]
                let storage = Storage.storage() //인스턴스 생성
                
                // [Storage 에 파일 업로드]
                storage.reference().child(filePath).listAll { (result, error) in
                    if let error = error {
                        S_Log._F_(description: C_FirebaseStorageService.ACTIVITY_NAME + " : [Firebase] [Storage] [Error] - 특정 파일 다운 로드 URL 확인 에러", data: [
                            "ERROR :: \(error.localizedDescription)"
                        ])
                        
                        // [콜백 반환]
                        completion("")
                        return
                    }
                    
                    // [result 널 체크]

                    if result != nil && result?.items.count ?? 0 > 0 {
                        
                        var search_item:StorageReference? = nil
                        
                        for item in result!.items {
                            
                            // [파일 명칭 체크 확인]
                            if fileName == item.name.description {
                                
                                // [변수에 삽입]
                                search_item = item
                                break
                            }
                        }
                        
                        // [다운로드 URL 확인]
                        if search_item != nil {
                            
                            var downUrl = ""
                            
                            search_item?.downloadURL(completion: { URL, Error in
                                if (error != nil) {
                                    S_Log._F_(description: C_FirebaseStorageService.ACTIVITY_NAME + " : [Firebase] [Storage] [Error] - 특정 파일 다운 로드 URL 확인 에러", data: [
                                        "ERROR :: downloadURL is null"
                                    ])
                                    
                                    // [콜백 반환]
                                    completion("")
                                    return
                                }
                                
                                downUrl = URL?.absoluteString ?? ""
                                
                                if downUrl.hasPrefix("http") == true && downUrl.contains("firebase") == true {
                                 
                                    // [리턴 반환 수행]
                                    S_Log._F_(description: C_FirebaseStorageService.ACTIVITY_NAME + " : [Firebase] [Storage] [Success] - 특정 파일 다운 로드 URL 확인 성공 [1]", data: [
                                        "RETURN :: \(downUrl)"
                                    ])
                                    
                                    // [콜백 반환]
                                    completion(downUrl)
                                    
                                }
                                else {
                                    
                                    downUrl = "https://firebasestorage.googleapis.com" + downUrl
                                    
                                    // [리턴 반환 수행]
                                    S_Log._F_(description: C_FirebaseStorageService.ACTIVITY_NAME + " : [Firebase] [Storage] [Success] - 특정 파일 다운 로드 URL 확인 성공 [2]", data: [
                                        "RETURN :: \(downUrl)"
                                    ])
                                    
                                    // [콜백 반환]
                                    completion(downUrl)
                                    
                                }
                                
                            })
                        }
                        else {
                            S_Log._F_(description: C_FirebaseStorageService.ACTIVITY_NAME + " : [Firebase] [Storage] [Error] - 특정 파일 다운 로드 URL 확인 에러", data: [
                                "ERROR :: search_item is null"
                            ])
                            
                            // [콜백 반환]
                            completion("")
                        }
                        
                    }
                    else {
                        S_Log._F_(description: C_FirebaseStorageService.ACTIVITY_NAME + " : [Firebase] [Storage] [Error] - 특정 파일 다운 로드 URL 확인 에러", data: [
                            "ERROR :: firebase save list is null"
                        ])
                        
                        // [콜백 반환]
                        completion("")
                    }
                }
            }
            else {
                S_Log._F_(description: C_FirebaseStorageService.ACTIVITY_NAME + " : [Firebase] [Storage] [Error] - 특정 파일 다운 로드 URL 확인 에러", data: [
                    "ERROR :: Input Data Is Null"
                ])
                
                // [콜백 반환]
                completion("")
            }
            
        }
    }

    
} // [클래스 종료]
 

[결과 출력]

 

 

반응형
Comments