Hyeyeon blog

[Android] 갤러리 사진을 Firebase-Storage에 업로드하기 본문

개발/Android

[Android] 갤러리 사진을 Firebase-Storage에 업로드하기

Hyeyeon.P 2021. 5. 7. 15:05
반응형

 

1. build.gradle(Project)

buildscript {
    repositories {
        google()
    }
    dependencies {
        classpath 'com.google.gms:google-services:4.3.5'
    }
}
allprojects {
    repositories {
        google()
    }
}

2. build.gradle(Module)

apply plugin: 'com.google.gms.google-services'
dependencies {
    implementation platform('com.google.firebase:firebase-bom:26.8.0')
    implementation 'com.google.firebase:firebase-storage-ktx'
}

3. Firebase Storage로 업로드하기

val uri = Uri.fromFile(File("/sdcard/image.jpg"))

// 버킷이 여러 개인 경우, 버킷 주소 명시 
// val storage = Firebase.storage("gs://xxxxxx.com")

val storageRef = storage.reference
val sdf = SimpleDateFormat("yyyyMMddhhmmss")
val fileName = sdf.format(Date()) + ".jpg"

// 업로드할 위치와 파일 명 (폴더가 없을 경우 자동 생성)
val riversRef = storageRef.child("images/$fileName") 
riversRef.putFile(uri)
    .addOnProgressListener { taskSnapshot ->
        val btf = taskSnapshot.bytesTransferred
        val tbc = taskSnapshot.totalByteCount
        val progress: Double = 100.0 * btf / tbc
            
        // 진행 상태 표시 
        progressBar.progress = progress.toInt()
    }.addOnFailureListener { Log.i("업로드 실패", "") }
    .addOnSuccessListener { Log.i("업로드 성공", "") }

4. 앨범의 사진을 Firebase Stroage에 업로드하기

class MainActivity : AppCompatActivity() {
    private val PICK_IMAGE = 10001

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        
        button.setOnClickListener {
            // 갤러리 호출 
            val intent = Intent(Intent.ACTION_GET_CONTENT).apply { type = "image/*" }
            startActivityForResult(intent, PICK_IMAGE)
        }
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == PICK_IMAGE) {
            val uri: Uri? = data?.data
            if (uri != null) {
                upload(uri)
            }
        }
    }
    
    private fun upload(uri: Uri) {
        val storageRef = storage.reference
        val sdf = SimpleDateFormat("yyyyMMddhhmmss")
        val fileName = sdf.format(Date()) + ".jpg"
        val riversRef = storageRef.child("/$fileName")

        riversRef.putFile(uri)
            .addOnProgressListener { taskSnapshot ->
                val btf = taskSnapshot.bytesTransferred
                val tbc = taskSnapshot.totalByteCount
                val progress: Double = 100.0 * btf / tbc

                // 진행 상태 표시 
                progressBar.progress = progress.toInt()
            }
            .addOnFailureListener { Log.i("업로드 실패", "") }
            .addOnSuccessListener { Log.i("업로드 성공", "") }
    }
}

 

관련 글

>> [Firebase] Firebase Storage 버킷 만들기

728x90
Comments