파이어베이스 스토리지

k_hyun·2023년 5월 2일
0

파이어베이스 스토리지는 앱의 파일을 저장하는 기능을 제공한다.
앱에서 사진을 서버에 올리고 내려받을 수 있다.

파일 올리기

// 스토리지 객체 얻기
val storage: FirebaseStorage = Firebase.storage

// 스토리지 참조 만들기
// images 폴더의 a.jpg 파일을 가리킨다
val storageRef: StorageReference = storage.reference
val imgRef: StorageReference = storageRef.child("images/a.jpg")

putBytes()를 통한 바이트값 저장

뷰의 내용을 비트맵 -> 바이트값으로 변환 후 스토리지에 저장한다.

// 화면을 비트맵 객체에 그리기
fun getBitmapFromView(view: View): Bitmap? {
	var bitmap = Bitmap.createBitmap(view.width, view.height, Bitmap.Config.ARGB_8888)
    var canvas = Canvas(bitmap)
    view.draw(canvas)
    return bitmap
}

...

// 이미지를 바이트값으로 읽기
val bitmap = getBitmapFromView(binding.addPicImageView)
val baos = ByteArrayOutputStream()
bitmap?.compress(Bitmap.CompressFormat.JPEG, 100, baos)
val data = baos.toByteArray()

// 바이트값을 스토리지에 저장하기
var uploadTask = imgRef.putBytes(data)
uploadTask.addOnFailureListener {}.addOnCompleteListener {}

putStream() 함수로 저장

// 파일 스트림으로 업로드
val stream = FileInputStream(File(filePath))
val uploadTask = imgRef.putStream(stream)

putFile() 함수로 저장

// 파일 경로로 업로드
val file = Uri.fromFile(File(filePath))
val uploadTask = imgRef.putFile(file)

업로드 파일 삭제

// 업로드 파일 삭제
val imgRef: StorageReference = storageRef.child("images/a.jpg")
imgRef.delete()
	.addOnFailureListener {...}
    .addOnCompleteListener {...}

파일 내려받기

스토리지의 파일을 내려받을 때는 getBytes()나 getFile() 함수를 이용한다.

// 내려받은 파일의 바이트값 가져오기
val storageRef: StorageReference = storage.reference
val imgRef: StorageReference = storageRef.child("images/a.jpg")
val ONE_MEGABYTE: Long = 1024 * 1024
imgRef.getBytes(ONE_MEGABYTE).addOnSuccessListener {
	val bitmap = BitmapFactory.decodeByteArray(it, 0, it.size)
    binding.downloadImageView.setImageBitmap(bitmap)
    }
    .addOnFailureListener {...}

바이트값 -> 비트맵으로 변환 후 뷰에 그린다.

getFile() 함수로 가져오기

// 로컬 저장소에 파일 내려받기
val imgRef: StorageReference = storageRef.child("images/a.jpg")
val localFile = File.createTempFile("images", "jpg")
imgRef.getFile(localFile).addOnSuccessListener {
	val bitmap = BitmapFactory.decodeFile(localFile.absolutePath)
    }
    .addOnFailureListener { ... }

downloadUrl() 함수로 URL 얻기

// 스토리지 파일의 URL 얻기
val imgRef: StorageReference = storageRef.child("images/a.jpg")
imgRef.downloadUrl
	.addOnSuccessListener{...}
    .addOnFailureListener{...}

0개의 댓글