Carica file con Cloud Storage per Unity

Cloud Storage for Firebase consente di caricare file in modo rapido e semplice in un Bucket fornito: Cloud Storage e gestiti da Firebase.

Creazione di un riferimento

Per caricare un file, innanzitutto crea un Cloud Storageriferimento al file che vuoi caricare.

Puoi creare un riferimento aggiungendo percorsi figlio alla radice del file Cloud Storage bucket oppure puoi creare un riferimento da un bucket esistente URL gs:// o https:// che fa riferimento a un oggetto in 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);

Non puoi caricare dati con un riferimento alla radice del tuo Cloud Storage bucket. Il riferimento deve indirizzare a un URL secondario.

Carica file

Una volta ottenuto un riferimento, puoi caricare i file su Cloud Storage in due modi:

  1. Eseguire il caricamento da un array di byte in memoria
  2. Caricamento da un percorso file che rappresenta un file sul dispositivo

Carica dai dati in memoria

Il metodo PutBytesAsync() è il modo più semplice per caricare un file su Cloud Storage. PutBytesAsync() accetta un byte[] e restituisce un valore System.Task<Firebase.Storage.StorageMetadata>, che contengono informazioni sul file quando l'attività è stata completata. In via facoltativa, usa IProgress<UploadState> (in genere StorageProgress<UploadState>) per monitora lo stato del caricamento.

// 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);
        }
    });

Carica da un file locale

Puoi caricare file locali sui dispositivi, ad esempio foto e video della fotocamera, con il metodo PutFileAsync(). PutFileAsync() prende string che rappresenta il percorso del file e restituisce un System.Task<Firebase.Storage.StorageMetadata> che conterrà informazioni sul file quando l'attività viene completata. In via facoltativa, usa IProgress<UploadState> (in genere StorageProgress<UploadState>) per monitora lo stato del caricamento.

// 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);
        }
    });

Se vuoi monitorare attivamente il tuo caricamento, puoi utilizzare un StorageProgress o la tua classe che implementa IProgress<UploadState>, con PutFileAsync() o PutBytesAsync(). Per ulteriori informazioni, consulta Gestire i caricamenti.

Aggiungi metadati dei file

Puoi anche includere i metadati quando carichi i file. Questi metadati contengono proprietà tipiche dei metadati dei file, come Name, Size e ContentType (comunemente tipo MIME). Il metodo PutFileAsync() viene impostato automaticamente deduce il tipo di contenuti dall'estensione del nome file, ma puoi sostituire il valore tipo rilevato automaticamente specificando ContentType nei metadati. In caso contrario fornisce un valore ContentType e Cloud Storage non può dedurre un valore predefinito da l'estensione del file, Cloud Storage utilizza application/octet-stream. Per ulteriori informazioni sui metadati dei file, consulta la sezione Utilizzare i metadati dei file.

// 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(...

Monitorare l'avanzamento del caricamento

Puoi associare gli ascoltatori ai caricamenti per monitorarne l'avanzamento. L'ascoltatore segue l'interfaccia System.IProgress<T> standard. Puoi utilizzare un'istanza della classe StorageProgress, per fornire il tuo Action<T> come callback per i segni di avanzamento.

// 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.");
    }
});

Gestione degli errori

Esistono diversi motivi per cui potrebbero verificarsi errori durante il caricamento, ad esempio il file locale non esiste o l'utente non ha l'autorizzazione per caricare il file desiderato. Puoi trovare ulteriori informazioni sugli errori nella sezione Gestire gli errori della documentazione.

Passaggi successivi

Ora che hai caricato i file, scopri come scaricarli da Cloud Storage.