파이어베이스 스토리지는 앱의 파일을 저장하는 기능을 제공한다.
앱에서 사진을 서버에 올리고 내려받을 수 있다.
// 스토리지 객체 얻기
val storage: FirebaseStorage = Firebase.storage
// 스토리지 참조 만들기
// images 폴더의 a.jpg 파일을 가리킨다
val storageRef: StorageReference = storage.reference
val imgRef: StorageReference = storageRef.child("images/a.jpg")
뷰의 내용을 비트맵 -> 바이트값으로 변환 후 스토리지에 저장한다.
// 화면을 비트맵 객체에 그리기
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 {}
// 파일 스트림으로 업로드
val stream = FileInputStream(File(filePath))
val uploadTask = imgRef.putStream(stream)
// 파일 경로로 업로드
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 {...}
바이트값 -> 비트맵으로 변환 후 뷰에 그린다.
// 로컬 저장소에 파일 내려받기
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 { ... }
// 스토리지 파일의 URL 얻기
val imgRef: StorageReference = storageRef.child("images/a.jpg")
imgRef.downloadUrl
.addOnSuccessListener{...}
.addOnFailureListener{...}