안드로이드 - FirebaseStorage(with Kotlin)

Purang·2022년 8월 18일
0

FireBase

목록 보기
5/6

오늘은 전에 한 거에 이어서 사진을 Firebase Storage에 저장해보도록 하겠습니다.

TestActivity에서 시작합니다.

TestActivity에서 아래 공식문서에서 사용된 활동가져오기를 사용하여 갤러리에 접근할 launcher를 만들어줍니다.

private var launcher = registerForActivityResult(ActivityResultContracts.GetContent()) {
            it-> changeFragment(CameraFragment(it))
    }

그리고 접근권한을 얻기 위한 코드도 등록해줍니다.

권한 요청

ActivityCompat.requestPermissions(this@TestActivity,
            arrayOf(android.Manifest.permission.READ_EXTERNAL_STORAGE), 1)
    

위 코드를 사용하기 위해 Manifests에 가서

위 사진과 같이 코드를 입력해줍니다.

다음으로 전에 만들었던 initBottomNavigationBar(= initNavigationBar)에서
R.id.camera가 클릭 되었을 때 launcher를 통해 갤러리로 이동합니다.

launcher.launch("image/*")

다음으로 CameraFragment에 가서

private var uri: Uri? = uri

override fun onCreateView(
       ,,,
        //선택한 이미지를 imageview에서 보여줌
        mBinding.uploadImage.setImageURI(uri)

        mBinding.setBtn.setOnClickListener {
            uploadImageFirebase(uri!!)
        }

       ....
    }

위와 같이 setImageURI를 통해 갤러리에서 선택한 이미지를 id = uploadImage인 Imageview에 세팅해줍니다.

그 후 uploadBtn클릭 시 uploadImageFirebase를 실행해줍니다.

 private fun uploadImageFirebase(uri : Uri) {
        var storage : FirebaseStorage? = FirebaseStorage.getInstance() //firebasestorage인스턴스생성
        //파일 이름 생성.
        var fileName = "IMAGE_${SimpleDateFormat("yyyymmdd_HHmmss").format(Date())}_.png"
      

        //var storageRef : StorageReference = storage.getReference() 대신 아래와 같이 간편하게 사용가능
        //var putRef : StorageReference = storageRef.child("images/").child(fileName)
        var imagesRef = storage!!.reference.child("images/").child(fileName)    //기본 참조 위치/images/${fileName}

        //var uploadTask : UploadTask = putRef.putFile(uri)
        imagesRef.putFile(uri).addOnSuccessListener {
            Toast.makeText(activity, getString(R.string.upload_success), Toast.LENGTH_SHORT).show()
            }.addOnFailureListener {
                println(it)
                Toast.makeText(activity, getString(R.string.upload_fail), Toast.LENGTH_SHORT).show()
            }
    }

먼저 storage로 FirebaseStorage의 인스턴스를 생성하고 filename으로 저장할 사진의 파일이름을 설정합니다.
그리고 원래는 주석과 같은 방식을 사용하였지만 간단하게 바로 참조할 수 있었습니다.
그래서 기본참조 위치에다가 child를 통해 images/라는 파일명이 존재하면 그 안에 없다면 폴더를 새로만들기 위해서고 그 뒤에 child는 filename으로 사진을 세팅합니다.

그리고 putFile을 통해 firebaseStorage에 저장을 합니다. addonsucesslistner와 addOnFailureListener를 통해 실패와 성공을 들을 수 있습니다.

setImageUri를 통해 사진 세팅

storage에 사진이 잘 저장된 것을 확인


참조
활동에서 결과 가져오기
Firebase 이미지 업로드

profile
몰입의 즐거움

0개의 댓글