Cloud Storage for Firebase ti consente di caricare file in modo rapido e semplice in un bucket Cloud Storage fornito e gestito da Firebase.
Crea un riferimento
Per caricare un file, crea innanzitutto un riferimento Cloud Storage per il file che desideri caricare.
Puoi creare un riferimento aggiungendo percorsi secondari alla radice del tuo bucket Cloud Storage 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 bucket Cloud Storage. Il tuo riferimento deve puntare a un URL secondario.
Caricare files
Una volta ottenuto un riferimento, puoi caricare file su Cloud Storage in due modi:
- Carica da un array di byte in memoria
- Carica 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 System.Task<Firebase.Storage.StorageMetadata>
che conterrà informazioni sul file al completamento 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); } });
Carica da un file locale
Puoi caricare file locali sui dispositivi, come foto e video dalla fotocamera, con il metodo PutFileAsync()
. PutFileAsync()
accetta una string
che rappresenta il percorso del file e restituisce un System.Task<Firebase.Storage.StorageMetadata>
che conterrà informazioni sul file al completamento 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 tuo caricamento, puoi utilizzare una classe StorageProgress
o la tua classe che implementa IProgress<UploadState>
, con i metodi PutFileAsync()
o PutBytesAsync()
. Vedi Gestisci caricamenti per ulteriori informazioni.
Aggiungi metadati del file
Puoi anche includere metadati quando carichi i file. Questi metadati contengono proprietà tipiche dei metadati dei file come Name
, Size
e ContentType
(comunemente indicato come tipo MIME). Il metodo PutFileAsync()
deduce automaticamente il tipo di contenuto dall'estensione del nome file, ma puoi sovrascrivere il tipo rilevato automaticamente specificando ContentType
nei metadati. Se non fornisci un ContentType
e Cloud Storage non riesce a dedurre un valore predefinito dall'estensione del file, Cloud Storage utilizza application/octet-stream
. Consulta la sezione Utilizzo dei metadati dei file per ulteriori informazioni sui 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 allegare ascoltatori ai caricamenti per monitorare l'avanzamento del caricamento. Il listener segue l'interfaccia System.IProgress<T>
standard. Puoi utilizzare un'istanza della classe StorageProgress
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 potrebbero verificarsi errori durante il caricamento, incluso il file locale che non esiste o l'utente che non dispone dell'autorizzazione per caricare il file desiderato. Puoi trovare ulteriori informazioni sugli errori nella sezione Gestisci errori della documentazione.
Prossimi passi
Ora che hai caricato i file, impariamo come scaricarli da Cloud Storage.