Entérate de todos los anuncios de Firebase Summit y descubre cómo Firebase puede ayudarte a acelerar el desarrollo de las apps y a ejecutarlas con confianza. Más información

Sube archivos con Cloud Storage para Unity

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Cloud Storage para Firebase le permite cargar archivos de forma rápida y sencilla en 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 al archivo que desea cargar.

Puede crear una referencia agregando rutas secundarias a la raíz de su depósito de Cloud Storage, o puede crear una referencia desde 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 puede cargar datos con una referencia a la raíz de su depósito de Cloud Storage. Su referencia debe apuntar a una URL secundaria.

Subir archivos

Una vez que tenga una referencia, puede cargar archivos en Cloud Storage de dos maneras:

  1. Subir desde una matriz de bytes en la memoria
  2. Carga desde una ruta de archivo que representa un archivo en el dispositivo

Subir desde datos en memoria

El método PutBytesAsync() es la forma más sencilla de cargar un archivo en Cloud Storage. PutBytesAsync() toma un byte[] y devuelve un System.Task<Firebase.Storage.StorageMetadata> que contendrá información sobre el archivo cuando se complete la tarea. Opcionalmente, puede usar un IProgress<UploadState> (generalmente StorageProgress<UploadState> ) para monitorear su 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, puede usar un IProgress<UploadState> (generalmente StorageProgress<UploadState> ) para monitorear su 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 PutFileAsync() o PutBytesAsync() . Consulte Administrar cargas para obtener más información.

Añadir metadatos de archivo

También puede incluir metadatos cuando cargue archivos. Estos metadatos contienen propiedades típicas de metadatos de archivos, como Name , Size y ContentType de contenido (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 puede 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 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 carga

Puede adjuntar oyentes a las cargas para monitorear el progreso de la carga. El agente de escucha sigue la interfaz estándar System.IProgress<T> . Puede usar una instancia de la clase StorageProgress para proporcionar su propia Action<T> como una 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.");
    }
});

Manejo de errores

Hay una serie de razones por las que pueden ocurrir errores en la carga, incluido que el archivo local 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 ha cargado archivos, aprendamos cómo descargarlos desde Cloud Storage.