Cloud Storage para Firebase te permite subir archivos con rapidez y facilidad a un bucket de Cloud Storage proporcionado y administrado por Firebase.
Crea una referencia
Para subir un archivo, primero crea una referencia de Cloud Storage al archivo que deseas subir.
Para ello, puedes anexar rutas de acceso secundarias a la raíz de tu
bucket de Cloud Storage o puedes crear una referencia a partir de una URL
gs://
o https://
existente que haga referencia a un objeto en Cloud Storage.
// Create a root reference StorageReference storageRef = storage.RootReference; // Create a reference to "mountains.jpg" StorageReference mountainsRef = storageRef.Child("mountains.jpg"); // Create a reference to 'images/mountains.jpg' StorageReference mountainImagesRef = storageRef.Child("images/mountains.jpg"); // While the file names are the same, the references point to different files Assert.AreEqual(mountainsRef.Name, mountainImagesRef.Name); Assert.AreNotEqual(mountainsRef.Path, mountainImagesRef.Path);
No puedes subir datos con una referencia a la raíz del bucket de Google Cloud Storage. La referencia debe apuntar a una URL secundaria.
Sube archivos
Una vez que tengas una referencia, puedes subir archivos a Cloud Storage de dos maneras:
- Subir desde un arreglo de bytes en la memoria.
- Subir desde una ruta de archivo que represente un archivo en el dispositivo.
Sube archivos desde datos en la memoria
El método PutBytesAsync()
es la forma más simple de subir un archivo a Cloud Storage. PutBytesAsync()
recibe un byte[] y arroja un System.Task<Firebase.Storage.StorageMetadata>
, que contendrá información acerca del archivo cuando se complete la tarea. De forma opcional, puedes usar un IProgress<UploadState>
(por lo general, StorageProgress<UploadState>
) para supervisar el estado de tu carga.
// Data in memory var customBytes = new byte[] { /*...*/ }; // Create a reference to the file you want to upload StorageReference riversRef = storageRef.Child("images/rivers.jpg"); // Upload the file to the path "images/rivers.jpg" riversRef.PutBytesAsync(customBytes) .ContinueWith((Task<StorageMetadata> task) => { if (task.IsFaulted || task.IsCanceled) { Debug.Log(task.Exception.ToString()); // Uh-oh, an error occurred! } else { // Metadata contains file metadata such as size, content-type, and md5hash. StorageMetadata metadata = task.Result; string md5Hash = metadata.Md5Hash; Debug.Log("Finished uploading..."); Debug.Log("md5 hash = " + md5Hash); } });
Sube archivos desde un archivo local
Puedes usar el método PutFileAsync()
para subir archivos locales de los dispositivos, como fotos y videos de la cámara. PutFileAsync()
toma una string
que representa la ruta al archivo y obtiene un System.Task<Firebase.Storage.StorageMetadata>
, que contendrá información sobre el archivo cuando se complete la tarea. De forma opcional, puedes usar un IProgress<UploadState>
(por lo general, StorageProgress<UploadState>
) para supervisar el estado de tu carga.
// File located on disk string localFile = "..."; // Create a reference to the file you want to upload StorageReference riversRef = storageRef.Child("images/rivers.jpg"); // Upload the file to the path "images/rivers.jpg" riversRef.PutFileAsync(localFile) .ContinueWith((Task<StorageMetadata> task) => { if (task.IsFaulted || task.IsCanceled) { Debug.Log(task.Exception.ToString()); // Uh-oh, an error occurred! } else { // Metadata contains file metadata such as size, content-type, and download URL. StorageMetadata metadata = task.Result; string md5Hash = metadata.Md5Hash; Debug.Log("Finished uploading..."); Debug.Log("md5 hash = " + md5Hash); } });
Si deseas supervisar la carga de forma activa, puedes usar una clase StorageProgress
o tu propia clase que implementa IProgress<UploadState>
, con los métodos PutFileAsync()
o PutBytesAsync()
.
Consulta cómo administrar cargas para obtener más información.
Agrega metadatos de archivos
También puedes incluir metadatos cuando subas archivos. Estos metadatos contienen propiedades típicas de metadatos de archivo, como Name
, Size
y ContentType
(comúnmente denominadas tipos de MIME). El método PutFileAsync()
infiere el tipo de contenido de forma automática a partir de la extensión del nombre de archivo, pero puedes especificar ContentType
en los metadatos para anular el tipo detectado de manera automática. Si no proporcionas un ContentType
y Cloud Storage no puede inferir un tipo predeterminado a partir de una extensión de archivo, Cloud Storage usará application/octet-stream
. Consulta la sección Usa metadatos de archivo para obtener más información acerca de estos.
// Create storage reference StorageReference mountainsRef = storageRef.Child("images/mountains.jpg"); byte[] customBytes = new byte[] { /*...*/ }; string localFile = "..."; // Create file metadata including the content type var newMetadata = new MetadataChange(); newMetadata.ContentType = "image/jpeg"; // Upload data and metadata mountainsRef.PutBytesAsync(customBytes, newMetadata, null, CancellationToken.None); // .ContinueWithOnMainThread(... // Upload file and metadata mountainsRef.PutFileAsync(localFile, newMetadata, null, CancellationToken.None); // .ContinueWithOnMainThread(...
Controla el progreso de la carga
Puedes adjuntar objetos de escucha a las cargas para monitorear su progreso. El objeto de escucha sigue la interfaz estándar System.IProgress<T>
. Puedes usar una instancia de la clase StorageProgress
a fin de proporcionar tu propia Action<T>
como devolución de llamada para las marcas de progreso.
// Start uploading a file var task = storageRef.Child("images/mountains.jpg") .PutFileAsync(localFile, null, new StorageProgress<UploadState>(state => { // called periodically during the upload Debug.Log(String.Format("Progress: {0} of {1} bytes transferred.", state.BytesTransferred, state.TotalByteCount)); }), CancellationToken.None, null); task.ContinueWithOnMainThread(resultTask => { if (!resultTask.IsFaulted && !resultTask.IsCanceled) { Debug.Log("Upload finished."); } });
Soluciona errores
Existen diferentes motivos por los que pueden producirse errores durante la carga, como que el archivo local no exista o que el usuario no tenga permiso para subir el archivo deseado. Para obtener más información sobre los errores, consulta la sección de los documentos denominada Soluciona errores.
Próximos pasos
Ahora que ya subiste archivos, veamos cómo descargarlos de Cloud Storage.