Notice
Recent Posts
Recent Comments
Link
투케이2K
128. (TWOK/UTIL) [Ios/Swift] C_FirebaseStorageService : 파이어베이스 Storage 스토리지 관리 클래스 본문
투케이2K 유틸파일
128. (TWOK/UTIL) [Ios/Swift] C_FirebaseStorageService : 파이어베이스 Storage 스토리지 관리 클래스
투케이2K 2024. 5. 15. 11:10[설 명]
프로그램 : Ios / Swift
설 명 : C_FirebaseStorageService : 파이어베이스 Storage 스토리지 관리 클래스
[소스 코드]
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 추가
* // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
* */
/**
* // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
* // 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_FinalData.AL_TITLE_ERRPR, content: "웹뷰 로드에 정의 되지 않은 타입 입니다 (html file path is nil)",
okBtb: S_FinalData.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)
}
}
}
// -----------------------------------------------------------------------------------------
// MARK: - [SEARCH FAST] : [Observable] : [Get File List] : Storage 에 저장 된 파일 리스트 확인
// -----------------------------------------------------------------------------------------
func observableStorageGetFileList(filePath:String, completion: @escaping (Array<String>)->()) {
/*
// -----------------------------------------
[observableStorageSaveFile 메소드 설명]
// -----------------------------------------
1. 파이어베이스 스토리지 파일 저장 목록 확인 실시
// -----------------------------------------
2. 호출 방법 :
// [파이어베이스 저장 경로 지정]
let filePath = "/"
// [메소드 호출]
C_FirebaseStorageService().observableStorageGetFileList(filePath:filePath){(result) in
S_Log._F_(description: "파이어베이스 파일 목록 확인", data: ["\(result)"])
}
// -----------------------------------------
*/
// [메인 큐에서 비동기 방식 실행 : UI 동작 실시]
DispatchQueue.main.async {
S_Log._F_(description: C_FirebaseStorageService.ACTIVITY_NAME + " : [Firebase] [Storage] 파일 저장 목록 확인 수행", data: [
"filePath :: \(filePath)"
])
// [리턴 변수 선언]
var returnData : Array<String> = []
// [널 체크]
if C_Util().stringNotNull(str: filePath) == 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] - 파일 저장 목록 확인 에러", data: [
"ERROR :: \(error.localizedDescription)"
])
// [콜백 반환]
completion(returnData)
return
}
// [result 널 체크]
if result != nil && result?.items.count ?? 0 > 0 {
for item in result!.items {
// [리턴 배열에 추가]
returnData.append(item.name)
}
// [리턴 반환 수행]
S_Log._F_(description: C_FirebaseStorageService.ACTIVITY_NAME + " : [Firebase] [Storage] [Success] - 파일 저장 목록 확인 성공", data: [
"RETURN :: \(returnData)"
])
// [콜백 반환]
completion(returnData)
}
else {
S_Log._F_(description: C_FirebaseStorageService.ACTIVITY_NAME + " : [Firebase] [Storage] [Error] - 파일 저장 목록 확인 에러", data: [
"ERROR :: firebase save list is null"
])
// [콜백 반환]
completion(returnData)
}
}
}
else {
S_Log._F_(description: C_FirebaseStorageService.ACTIVITY_NAME + " : [Firebase] [Storage] [Error] - 파일 저장 목록 확인 에러", data: [
"ERROR :: Input Data Is Null"
])
// [콜백 반환]
completion(returnData)
}
}
}
// -----------------------------------------------------------------------------------------
// 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("")
}
}
}
} // [클래스 종료]
반응형
'투케이2K 유틸파일' 카테고리의 다른 글
Comments