Dopo aver caricato un file nel riferimento Cloud Storage, puoi anche ottenere e aggiornare i metadati del file, ad esempio per visualizzare o aggiornare il tipo di contenuto. I file possono anche memorizzare coppie chiave/valore personalizzate con metadati di file aggiuntivi.
Ottieni metadati del file
I metadati dei file contengono proprietà comuni come name
, size
e contentType
(spesso indicato come tipo MIME) oltre ad alcune meno comuni come contentDisposition
e timeCreated
. Questi metadati possono essere recuperati da un riferimento Cloud Storage utilizzando il metodo getMetadata()
.
Kotlin+KTX
// Create a storage reference from our app val storageRef = storage.reference // Get reference to the file val forestRef = storageRef.child("images/forest.jpg")
forestRef.metadata.addOnSuccessListener { metadata -> // Metadata now contains the metadata for 'images/forest.jpg' }.addOnFailureListener { // Uh-oh, an error occurred! }
Java
// Create a storage reference from our app StorageReference storageRef = storage.getReference(); // Get reference to the file StorageReference forestRef = storageRef.child("images/forest.jpg");
forestRef.getMetadata().addOnSuccessListener(new OnSuccessListener<StorageMetadata>() { @Override public void onSuccess(StorageMetadata storageMetadata) { // Metadata now contains the metadata for 'images/forest.jpg' } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception exception) { // Uh-oh, an error occurred! } });
Aggiorna metadati del file
È possibile aggiornare i metadati del file in qualsiasi momento al termine del caricamento del file utilizzando il metodo updateMetadata()
. Fare riferimento all'elenco completo per ulteriori informazioni su quali proprietà possono essere aggiornate. Vengono aggiornate solo le proprietà specificate nei metadati, tutte le altre rimangono invariate.
Kotlin+KTX
// Create a storage reference from our app val storageRef = storage.reference // Get reference to the file val forestRef = storageRef.child("images/forest.jpg")
// Create file metadata including the content type val metadata = storageMetadata { contentType = "image/jpg" setCustomMetadata("myCustomProperty", "myValue") } // Update metadata properties forestRef.updateMetadata(metadata).addOnSuccessListener { updatedMetadata -> // Updated metadata is in updatedMetadata }.addOnFailureListener { // Uh-oh, an error occurred! }
Java
// Create a storage reference from our app StorageReference storageRef = storage.getReference(); // Get reference to the file StorageReference forestRef = storageRef.child("images/forest.jpg");
// Create file metadata including the content type StorageMetadata metadata = new StorageMetadata.Builder() .setContentType("image/jpg") .setCustomMetadata("myCustomProperty", "myValue") .build(); // Update metadata properties forestRef.updateMetadata(metadata) .addOnSuccessListener(new OnSuccessListener<StorageMetadata>() { @Override public void onSuccess(StorageMetadata storageMetadata) { // Updated metadata is in storageMetadata } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception exception) { // Uh-oh, an error occurred! } });
Puoi eliminare le proprietà dei metadati scrivibili passando null
:
Kotlin+KTX
// Create file metadata with property to delete val metadata = storageMetadata { contentType = null } // Delete the metadata property forestRef.updateMetadata(metadata).addOnSuccessListener { updatedMetadata -> // updatedMetadata.contentType should be null }.addOnFailureListener { // Uh-oh, an error occurred! }
Java
// Create file metadata with property to delete StorageMetadata metadata = new StorageMetadata.Builder() .setContentType(null) .build(); // Delete the metadata property forestRef.updateMetadata(metadata) .addOnSuccessListener(new OnSuccessListener<StorageMetadata>() { @Override public void onSuccess(StorageMetadata storageMetadata) { // metadata.contentType should be null } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception exception) { // Uh-oh, an error occurred! } });
Gestire gli errori
Esistono diversi motivi per cui potrebbero verificarsi errori durante il recupero o l'aggiornamento dei metadati, incluso il file inesistente o la mancata autorizzazione dell'utente per accedere al file desiderato. Ulteriori informazioni sugli errori sono disponibili nella sezione Gestione degli errori della documentazione.
Metadati personalizzati
È possibile specificare metadati personalizzati utilizzando il metodo setCustomMetadata()
nella classe StorageMetadata.Builder
.
Kotlin+KTX
val metadata = storageMetadata { setCustomMetadata("location", "Yosemite, CA, USA") setCustomMetadata("activity", "Hiking") }
Java
StorageMetadata metadata = new StorageMetadata.Builder() .setCustomMetadata("location", "Yosemite, CA, USA") .setCustomMetadata("activity", "Hiking") .build();
Puoi archiviare dati specifici dell'app per ciascun file in metadati personalizzati, ma ti consigliamo vivamente di utilizzare un database (come Firebase Realtime Database ) per archiviare e sincronizzare questo tipo di dati.
Proprietà dei metadati dei file
Di seguito è disponibile un elenco completo delle proprietà dei metadati su un file:
Acquirente di proprietà | Tipo | Il setter esiste |
---|---|---|
getBucket | String | NO |
getGeneration | String | NO |
getMetadataGeneration | String | NO |
getPath | String | NO |
getName | String | NO |
getSizeBytes | long | NO |
getCreationTimeMillis | long | NO |
getUpdatedTimeMillis | long | NO |
getMd5Hash | String | NO |
getCacheControl | String | SÌ |
getContentDisposition | String | SÌ |
getContentEncoding | String | SÌ |
getContentLanguage | String | SÌ |
getContentType | String | SÌ |
getCustomMetadata | String | SÌ |
getCustomMetadataKeys | Set<String> | NO |
Caricare, scaricare e aggiornare i file è importante, ma lo è anche la possibilità di rimuoverli. Impariamo come eliminare file da Cloud Storage.