Firebase Storage
Firebase Storage nos permite alojar ficheros, ya sean audios, videos, etc.
No olvides configurar las reglas también en Firebase Storage:
El primer paso es instanciar la clase FirebaseStorageReference
a través la cual realizaremos todas las acciones:
StorageReference mStorageRef = FirebaseStorage.getInstance().getReference();
Subir imagen
public void upload(View v) {
Uri file = Uri.parse("android.resource://" + getPackageName() + "/" + R.drawable.captura);
StorageReference riversRef = mStorageRef.child("images/rivers.jpg");
riversRef.putFile(file)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
// Get a URL to the uploaded content
//Uri downloadUrl = taskSnapshot.getDownloadUrl();
Log.d("prueba", "completada la subida");
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
Log.d("prueba", "fallo subida");
}
});
}
En este caso se selecciona una imagen del dispositivo a través de su URI. Teniendo esa referencia, el método putFile()
guarda el fichero en Firebase con la ruta y nombre especifiados en StorageReference
. En caso de no existir la ruta de destino images/
se creará.
Descargar imagen
Cuando consultemos a Firebase Storage por una imagen nos proporcionará una URI que nos llevará a la imagen seleccionada. Esa URI la podremos utilizar para, por ejemplo, cargar una imagen en un ImageView
, aunque para hacerlo debemos de utilizar una librería externa. En este caso se utiliza Picasso
:
implementation 'com.squareup.picasso:picasso:2.71828'
Y para descargar:
public void download(View v) throws IOException {
final StorageReference riversRef = mStorageRef.child("images/rivers.jpg");
final File localFile = File.createTempFile("images", "jpg");
riversRef.getFile(localFile)
.addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
@Override
public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
// Successfully downloaded data to local file
riversRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
ImageView imageView = findViewById(R.id.imageView);
Log.d("prueba", "onSuccess: uri= "+ uri.toString());
Picasso.get().load(uri.toString()).into(imageView);
}
});
Log.d("prueba", "completada la descarga " );
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
// Handle failed download
Log.d("prueba", "fallo descarga");
}
});
}