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, per prima cosa crea un riferimento Cloud Storage 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 directory principale Cloud Storage bucket. Il tuo riferimento deve indirizzare a un URL secondario.
Carica file
Una volta creato un riferimento, puoi caricare i file su Cloud Storage in due modi:
- Caricamento da un array di byte in memoria
- Caricamento da un percorso file che rappresenta un file sul dispositivo
Carica da 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,
fotocamera, con il metodo PutFileAsync()
. PutFileAsync()
riceve un string
rappresentante il percorso del file e restituisce un System.Task<Firebase.Storage.StorageMetadata>
contenente informazioni sul file al termine dell'attività. 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à di metadati dei file comuni come Name
, Size
e ContentType
(comunemente noti come 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 usa 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(...
Monitora l'avanzamento del caricamento
Puoi collegare i listener ai caricamenti per monitorare l'avanzamento del
per il caricamento. Il listener segue lo standard System.IProgress<T>
a riga di comando. 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 dispone dell'autorizzazione per caricare il file desiderato. Puoi trovare ulteriori informazioni sugli errori nel Gestire gli errori sezione dei documenti.
Passaggi successivi
Ora che hai caricato i file, vediamo come scaricarli da Cloud Storage.