Firebase에 이미지 데이터 추가하기

작성일

Firebase에 이미지 데이터 추가하기

예시 코드
이미지를 jpeg로 압축한다.

guard let imageData = profileImage.jpegData(compressionQuality: 0.3) else { return }

파일이름을 uuid로 만들어주기

let filename = NSUUID().uuidString

경로를 지정해준다.

let storageRef = STORAGE_PROFILE_IMAGES.child(filename)

여기서 STORAGE_PROFILE_IMAGES란?

Storage.storage().reference().child("profile_images")

이다. 저장할 경로 Storage.storage().reference()에 profile_images란 폴더를 추가해준다.

다시 돌아가서 경로를 지준해준다음, .putData 를 이용해서 압축한 이미지를 넣고,

storageRef.putData(imageData, metadata: nil)

.downloadURL 를 이용해서 이미지 url주소를 가져올 수 있다.

전체코드(데이터추가에서 사용한 코드가 같이 적혀있을 수 있다.)

guard let profileImage = profileImage else {
            print("DEBUG: Please select a profile image..")
            return
        }
        guard let email = emailTextField.text else { return }
        guard let password = passwordTextField.text else { return }
        guard let fullname = fullnameTextField.text else { return }
        guard let username = usernameTextField.text else { return }
        
        
        // 이미지를 jpeg로 압축하기
        guard let imageData = profileImage.jpegData(compressionQuality: 0.3) else { return }
        // 파일이름을 uuid로 만들어주기
        let filename = NSUUID().uuidString
        let storageRef = STORAGE_PROFILE_IMAGES.child(filename)
        
        storageRef.putData(imageData, metadata: nil) { meta, error in
            storageRef.downloadURL { url, error in
                guard let profileImageUrl = url?.absoluteString else { return }
                
                // 파이어베이스에 회원가입
                Auth.auth().createUser(withEmail: email, password: password) { result, error in
                    if let error = error {
                        print("DEBUG: Error is \(error.localizedDescription)")
                        return
                    }
                    
                    // 사용자의 User UID
                    guard let uid = result?.user.uid else { return }
                    
                    // 저장할 값을 딕셔너리형태로 만들어준다.
                    let values = ["email": email,
                                  "username": username,
                                  "fullname": fullname,
                                  "profileImageUrl": profileImageUrl]
                    
                    // REF_USERS란? 저장할 경로 Database.database().reference()까진 같고,
                    // 그뒤 "user"란 키를 추가할건데 그걸 .child(uid)에 추가할 것이다. -> REF_USERS.child(uid)로 변경
                    // 추가하는 메서드 .updateChildValues이고, values을 넣어준다.
                    REF_USERS.child(uid).updateChildValues(values) { error, ref in
                        print("DEBUG: Seuccessfully updated user information..")
                    }
                }
            }
        }

데이터베이스에 image 처럼 폴더가 추가된 모습과 image 처럼 사진 데이터가 추가된 모습을 볼 수있다.