Cloud Storage for Firebase ti consente di caricare file in un Cloud Storage bucket fornito e gestito da Firebase in modo rapido e semplice.
Creazione di un riferimento
Per caricare un file, innanzitutto crea un Cloud Storage riferimento al file che vuoi caricare.
Puoi creare un riferimento aggiungendo percorsi secondari alla radice del tuo
Cloud Storage bucket oppure puoi creare un riferimento da un URL
gs:// o https:// esistente 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 rimandare a un URL secondario.
Carica file
Una volta creato un riferimento, puoi caricare i file in Cloud Storage in due modi:
- Caricamento da un array di byte in memoria
- Caricamento da un percorso file che rappresenta un file sul dispositivo
Caricamento da dati in memoria
Il metodo PutBytesAsync() è il modo più semplice per caricare un file in
Cloud Storage. PutBytesAsync() accetta un byte[]
e restituisce un System.Task<Firebase.Storage.StorageMetadata> che
conterrà informazioni sul file al termine dell'attività. Facoltativamente, puoi
utilizzare un IProgress<UploadState> (in genere StorageProgress<UploadState>) per
monitorare 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); } });
Caricamento da un file locale
Puoi caricare file locali sui dispositivi, ad esempio foto e video dalla fotocamera, con il metodo PutFileAsync(). PutFileAsync() accetta un string
che rappresenta il percorso del file e restituisce un
System.Task<Firebase.Storage.StorageMetadata> che conterrà
informazioni sul file al termine dell'attività. Facoltativamente, puoi
utilizzare un IProgress<UploadState> (in genere StorageProgress<UploadState>) per
monitorare 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 caricamento, puoi utilizzare una StorageProgress
classe o una tua classe che implementa IProgress<UploadState>, con i
PutFileAsync() o PutBytesAsync() metodi.
Per ulteriori informazioni, consulta Gestire i caricamenti.
Aggiungere metadati dei file
Puoi anche includere i metadati quando carichi i file. Questi metadati contengono le proprietà dei metadati dei file tipici, come Name, Size e ContentType (comunemente indicato come tipo MIME). Il metodo PutFileAsync() deduce automaticamente il tipo di contenuti dall'estensione del nome file, ma puoi sostituire il tipo rilevato automaticamente specificando ContentType nei metadati. Se non
fornisci un ContentType e Cloud Storage non riesce a 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 collegare listener ai caricamenti per monitorare l'avanzamento del caricamento. Il listener segue l'interfaccia standard System.IProgress<T>. Puoi utilizzare un'istanza della StorageProgress classe, per fornire
la tua Action<T> come callback per i tick 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 possono 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.