Armazenando dados no Firebase com Android — Storage

Quem falou que aplicações simples precisam de um super backend?

Daivid Vasconcelos Leal
Jul 15 · 5 min read
Image for post
Image for post
Image for post
Image for post
Print screen da primeira tela apresentada pelo Firebase ao clicar em “Primeiros passos”. firebase.google.com
Image for post
Image for post
firebase.google.com
{
"uid": "",
"token": {
"sub": "",
"aud": "app-999999",
"email": "",
"email_verified": false,
"phone_number": "",
"name": "",
"firebase": {
"sign_in_provider": "google.com"
}
}
}
implementation "com.google.firebase:firebase-storage:19.1.0"
FirebaseStorage.getInstance()
FirebaseApp.initializeApp(context)

Upload

A partir desta seção tenha em mente a seguinte classe, com a implementação dos métodos descritos em sequência como parte do escopo dela:

class ServiceFirebaseStorage(
private val firebaseStorage: FirebaseStorage
){ }
fun uploadPhoto(
uriFile: Uri,
fileName: String,
success: () -> Unit,
error: (Exception?) -> Unit
) {
val ref = firebaseStorage.getReference(fileName)
ref.putFile(uriFile).addOnCompleteListener{
success()
}.addOnFailureListener{
error(it)
}
}
fun uploadPhoto(
uriFile: Uri,
fileName: String,
success: (uri: Uri) -> Unit,
error: (Exception?) -> Unit
) {
val ref = firebaseStorage.getReference(fileName)
val task = ref.putFile(uriFile)
this.generateUrlDownload(ref, task, success, error)
}

private fun generateUrlDownload(
reference: StorageReference,
task: StorageTask<UploadTask.TaskSnapshot>,
success: (uri: Uri) -> Unit,
error: (Exception?) -> Unit
) {
task.continueWithTask { taskExecuted ->
if
(taskExecuted.isSuccessful) {
reference.downloadUrl
} else {
taskExecuted.exception?.let {
throw it
}
}
}.addOnCompleteListener { task ->
if
(task.isSuccessful) {
task.result?.let(success) ?: run {
error(Throwable("Unknown Error"))
}
} else {
error(Throwable("Unknown Error!"))
}
}.addOnFailureListener(error)
}

Download

Agora vejamos como fazer o download de um arquivo. Para isso é necessário ter a referência do arquivo, a referência do firebase e um arquivo temporário no qual será salvo o dado que foi realizado o download do Storage. Então, repare a pequena mudança no código a seguir:

fun downloadFile(
fileName: String,
fileType: String,
fileExt: String,
success: (file: File) -> Unit,
error: (Exception?) -> Unit
) {
val ref = firebaseStorage.reference.child(fileName)
val saveFileInto = File.createTempFile(fileType, fileExt)
ref.getFile(saveFileInto).addOnSuccessListener {
success(saveFileInto)
}.addOnFailureListener(error)
}

Delete

Por fim, porém não menos importante veremos aqui como deletar um arquivo. A função de delete já está pronta e, como no caso do downlaod, só é necessário definir qual arquivo será deletado dando a referência do Firebase e do arquivo por meio do nome.

fun deleteFile(
fileDir: String,
success: (task: Task<Void>) -> Unit,
error: (java.lang.Exception?) -> Unit
) {
val ref = firebaseStorage.reference.child(fileDir)
ref.delete().addOnFailureListener(error)
.addOnCompleteListener(success)
}

Conclusão

Bem, com essa solução proposta pelo Firebase podemos simplesmente esquecer a criação de serviços complexos de FTP para armazenamento de arquivos. Como dito anteriormente, o Firebase é uma ótima solução para serviços simples, mas pense antes de sair mudando tudo para essa proposta. Às vezes é preciso usar outros serviços que ainda não estão incluídos nessa ferramenta.

Concrete

Nós desenvolvemos produtos digitais com inovação, agilidade…

Daivid Vasconcelos Leal

Written by

Currently Master Student at UFRPE in Applied Computer Science with the field Quantum Computer, and Android Developer at Concrete Solutions.

Concrete

Concrete

Nós desenvolvemos produtos digitais com inovação, agilidade e excelentes práticas, para que o mercado brasileiro e latino-americano acompanhe a velocidade do mercado digital mundial.

Daivid Vasconcelos Leal

Written by

Currently Master Student at UFRPE in Applied Computer Science with the field Quantum Computer, and Android Developer at Concrete Solutions.

Concrete

Concrete

Nós desenvolvemos produtos digitais com inovação, agilidade e excelentes práticas, para que o mercado brasileiro e latino-americano acompanhe a velocidade do mercado digital mundial.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch

Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore

Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store