Cloud Storage para Firebase le permite cargar archivos de forma rápida y sencilla a un depósito de Cloud Storage proporcionado y administrado por Firebase.
Crear una referencia
Para cargar un archivo, primero cree una referencia de Cloud Storage para el archivo que desea cargar.
Puedes crear una referencia agregando rutas secundarias a la raíz de tu depósito 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 cargar datos con una referencia a la raíz de tu depósito de Cloud Storage. Su referencia debe apuntar a una URL secundaria.
Subir archivos
Una vez que tengas una referencia, podrás subir archivos a Cloud Storage de dos maneras:
- Cargar desde una matriz de bytes en la memoria
- Cargar desde una ruta de archivo que representa un archivo en el dispositivo
Cargar desde datos en la memoria
El método PutBytesAsync()
es la forma más sencilla de cargar un archivo en Cloud Storage. PutBytesAsync()
toma un byte[] y devuelve System.Task<Firebase.Storage.StorageMetadata>
que contendrá información sobre el archivo cuando se complete la tarea. Opcionalmente, puedes usar un IProgress<UploadState>
(normalmente StorageProgress<UploadState>
) para monitorear tu estado de 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); } });
Subir desde un archivo local
Puede cargar archivos locales en los dispositivos, como fotos y videos de la cámara, con el método PutFileAsync()
. PutFileAsync()
toma una string
que representa la ruta al archivo y devuelve System.Task<Firebase.Storage.StorageMetadata>
que contendrá información sobre el archivo cuando se complete la tarea. Opcionalmente, puedes usar un IProgress<UploadState>
(normalmente StorageProgress<UploadState>
) para monitorear tu estado de 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 desea monitorear activamente su carga, puede usar una clase StorageProgress
o su propia clase que implemente IProgress<UploadState>
, con los métodos PutFileAsync()
o PutBytesAsync()
. Consulte Administrar cargas para obtener más información.
Agregar metadatos de archivo
También puedes incluir metadatos cuando subes archivos. Estos metadatos contienen propiedades típicas de metadatos de archivos, como Name
, Size
y ContentType
(comúnmente denominado tipo MIME). El método PutFileAsync()
infiere automáticamente el tipo de contenido a partir de la extensión del nombre de archivo, pero puedes anular el tipo detectado automáticamente especificando ContentType
en los metadatos. Si no proporciona un ContentType
y Cloud Storage no puede inferir un valor predeterminado a partir de la extensión del archivo, Cloud Storage usa application/octet-stream
. Consulte la sección Usar metadatos de archivos para obtener más información sobre los metadatos de archivos.
// 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(...
Supervisar el progreso de la carga
Puede adjuntar oyentes a las cargas para monitorear el progreso de la carga. El oyente sigue la interfaz estándar System.IProgress<T>
. Puede utilizar una instancia de la clase StorageProgress
para proporcionar su propia Action<T>
como devolución de llamada para los ticks 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."); } });
Manejo de errores
Hay varias razones por las que pueden ocurrir errores durante la carga, incluido el archivo local que no existe o que el usuario no tiene permiso para cargar el archivo deseado. Puede encontrar más información sobre los errores en la sección Manejar errores de los documentos.
Próximos pasos
Ahora que has subido archivos, aprendamos cómo descargarlos desde Cloud Storage.