Firebase Storage brinda el servicio de almacenamiento de archivos.

Android — Firebase Storage (1)

Armando Picón
devStories
Published in
4 min readJul 22, 2016

--

En los artículos anteriores, hablé sobre cómo integrar tu aplicación Android con los servicios de autenticación y base de datos; en esta ocasión nos toca hablar sobre el servicio de almacenamiento (storage) que nos provee Firebase.

Te invito a leer mis artículos anteriores sobre Firebase.

Video de introducción a Firebase Storage (está en inglés pero se entiende)

Algunos puntos clave del servicio se mencionan en la documentación oficial y que paso a resumir:

  • Robusto, ante un corte en la subida o descarga de archivos, ya se está preparado para poderlas resumir y completar cuando la conexión vuelva.
  • Seguro, la integración con Firebase Authentication le provee de la capa de seguridad para mantener a salvo los archivos que se suben.
  • Escalable, si la aplicación se vuelve viral, se cuenta con el soporte de Google Cloud Storage para el almacenamiento de cantidades grandes de archivos.

Hace poco construí una app de ejempo que nos ayudará a entender y aprender cómo realizar la integración con Firebase Storage. Vamos a repasar los pasos que seguí para ello.

Paso 1: Integrar el SDK de Firebase Storage

Recuerda primero integrar tu proyecto Firebase a tu proyecto Android, los pasos a seguir los explico en mi primer artículo.

Uno de los primeros pasos a seguir consiste en agregar las respectivas dependencias de los servicios authentication y storage:

compile "com.google.firebase:firebase-auth:$firebase_version"
compile "com.google.firebase:firebase-storage:$firebase_version"

Paso 2: Crear una referencia

FirebaseStorage storage = FirebaseStorage.getInstance();
StorageReference storageReference = storage.getReferenceFromUrl("gs://mi-libreta.appspot.com");

A través de estas líneas, podemos obtener la referencia a nuestro repositorio. No perdamos de vista que la referencia que finalmente se obtiene corresponde a un objeto de Google Cloud Storage. Dado ese soporte, si nuestra aplicación se viraliza, tendremos la oportunidad de crecer en capacidad. Tomemos en cuenta que en esta situación estamos apuntando a una url; la misma que podemos ubicar en la opción de Storage en la consola de Firebase.

Paso 3: Sube

final StorageReference photoReference = storageReference.child("photos")
.child(fileUri.getLastPathSegment());

En nuestro ejemplo, queremos almacenar guardar las fotos que los usuarios carguen en un directorio específico. Es por ello que a nuestra referencia inicial, apuntamos al nodo “photos”; tomen en cuenta que no es necesario crear un directorio ya que al realizar nuestra primera carga, Firebase se encargará de crearlo. Finalmente, necesitamos agregar la referencia que corresponderá al archivo; por ello, usamos la función “getLastPathSegment” sobre la URI del archivo que vamos a cargar.

photoReference.putFile(fileUri).addOnFailureListener(this, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "uploadFromUri:onFailure", e);
downloadUrl = null;
Toast.makeText(MainActivity.this, "Error: upload failed",
Toast.LENGTH_SHORT).show();
}
}).addOnSuccessListener(this, new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Log.d(TAG, "uploadFromUri:onSuccess");
// Aquí obtenemos la url de la foto que cargamos
downloadUrl = taskSnapshot.getMetadata().getDownloadUrl();
savePictureUrlAsANote(downloadUrl); }
});

Una vez que tenemos la referencia, a continuación, debemos cargar la foto. Para ello, empleamos la función putFile y le enviamos como parámetro la URI del archivo (en este caso de la foto) que vamos a cargar. Para manipular o determinar que sucederá con la aplicación cuando la carga se haya efectuado con éxito o haya fallado debemos agregar las implementaciones de las interfaces OnSuccessListener y OnFailureListener.

En nuestro ejemplo, cuando la carga es exitosa obtenemos la URL del archivo cargado, para luego guardarlo en la base de datos.

Apuntes Finales:

Y hasta aquí llegamos con este artículo; existe un paso adicional que no incluí en el ejemplo y corresponde a las reglas de seguridad para Firebase Storage, si desean revisar más sobre dicho tema, la referencia la he puesto al final de este artículo.

No dejen de revisar el ejemplo en su repositorio en github. En los próximos artículos estaremos hablando sobre la descarga de archivos, las notificaciones y la autenticación vía el SDK de Firebase.

Los invito a revisar los slides de mi última presentación sobre la Integración de Android con Firebase, basado en el ejemplo que uso en este artículo:

Referencias:

Puedes revisar otros posts:

Si te gustó, puedes compartirlo y recomendarlo.

--

--

Armando Picón
devStories

lifelong learner • 👨🏽‍💻 Android eng (ex: @uber ) • 🇵🇪 @ 🇨🇱 • @gdgopen • content creator @devpicon | @primosauda