Utiliser des métadonnées de fichier avec Cloud Storage pour C++

Après avoir importé un fichier dans la référence Cloud Storage, vous pouvez également obtenir et mettre à jour les métadonnées du fichier, par exemple pour modifier le type de contenu. Les fichiers peuvent également stocker des paires clé/valeur personnalisées avec des métadonnées de fichier supplémentaires.

Obtenir les métadonnées des fichiers

Les métadonnées de fichier contiennent des propriétés courantes telles que name, size et content_type (souvent appelées type MIME), ainsi que des propriétés moins courantes telles que content_disposition et time_created. Ces métadonnées peuvent être récupérées à partir d'une référence Cloud Storage à l'aide de la méthode GetMetadata.

// Create reference to the file whose metadata we want to retrieve
StorageReference forest_ref = storage_ref.Child("images/forest.jpg");

// Get metadata properties
Future future = forest_ref.GetMetadata();

// Wait for Future to complete...

if (future.Error() != firebase::storage::kErrorNone) {
  // Uh-oh, an error occurred!
} else {
  // We can now retrieve the metadata for 'images/forest.jpg'
  Metadata* metadata = future.Result();
}

Mettre à jour les métadonnées des fichiers

Vous pouvez mettre à jour les métadonnées d'un fichier à tout moment une fois son importation terminée à l'aide de la méthode UpdateMetadata. Pour en savoir plus sur les propriétés pouvant être mises à jour, consultez la liste complète. Seules les propriétés spécifiées dans les métadonnées sont mises à jour. Toutes les autres restent inchangées.

// Create reference to the file whose metadata we want to change
firebase::storage::StorageReference forest_ref = storage_ref.child("images/forest.jpg");

// Create file metadata to update
Metadata new_metadata;
newMetadata.set_cache_control("public,max-age=300");
newMetadata.set_content_type("image/jpeg");

// Update metadata properties
Future future = forest_ref.UpdateMetadata(new_metadata);

// Wait for Future to complete...

if (future.Error() != firebase::storage::kErrorNone) {
  // Uh-oh, an error occurred!
} else {
  // We can now retrieve the updated metadata for 'images/forest.jpg'
  Metadata* metadata = future.Result();
}

Vous pouvez supprimer les propriétés de métadonnées accessibles en écriture en transmettant la chaîne vide:

// Create file metadata with property to delete
StorageMetadata new_metadata;
new_metadata.set_content_type("");

// Delete the metadata property
Future future = forest_ref.UpdateMetadata(new_metadata);

// Wait for Future to complete...

if (future.Error() != 0) {
  // Uh-oh, an error occurred!
} else {
  // metadata.content_type() should be an empty string
  Metadata* metadata = future.Result();
}

Gérer les erreurs

Plusieurs raisons peuvent expliquer l'apparition d'erreurs lors de l'obtention ou de la mise à jour de métadonnées, y compris si le fichier n'existe pas ou si l'utilisateur n'est pas autorisé à accéder au fichier souhaité. Pour en savoir plus sur les erreurs, consultez la section Gérer les erreurs de la documentation.

Métadonnées personnalisées

Vous pouvez spécifier des métadonnées personnalisées en tant que std::map contenant des propriétés std::string.

std::map<std::string, std::string>* custom_metadata = metadata.custom_metadata();
custom_metadata->insert(std::make_pair("location", "Yosemite, CA, USA");
custom_metadata->insert(std::make_pair("activity", "Hiking");

Vous pouvez stocker des données spécifiques à l'application pour chaque fichier dans des métadonnées personnalisées, mais nous vous recommandons vivement d'utiliser une base de données (telle que Firebase Realtime Database) pour stocker et synchroniser ce type de données.

Propriétés des métadonnées de fichier

Vous trouverez ci-dessous la liste complète des propriétés de métadonnées d'un fichier :

Propriété Type Accessible en écriture
bucket carac* NON
generation const char* NON
metageneration const char* NON
full_path const char* NON
name const char* NON
size int64_t NON
time_created int64_t NON
updated int64_t NON
cache_control const char* OUI
content_disposition const char* OUI
content_encoding const char* OUI
content_language const char* OUI
content_type const char* OUI
download_urls std::vector<std::string> NON
custom_metadata std::map<std::string, std::string> OUI

Étapes suivantes

Il est important d'importer, de télécharger et de mettre à jour des fichiers, mais aussi de pouvoir les supprimer. Découvrez comment supprimer des fichiers depuis Cloud Storage.