Cloud Storage for C++ でファイル メタデータを使用する

ファイルを Cloud Storage 参照にアップロードした後で、ファイル メタデータを取得、更新して、コンテンツ タイプの更新などを行うことができます。ファイルには、追加のファイル メタデータを使用してカスタム Key-Value ペアを格納することもできます。

ファイル メタデータを取得する

ファイル メタデータには、namesizecontent_type(多くの場合 MIME タイプと呼ばれます)などの一般的なプロパティに加え、content_dispositiontime_created などのあまり一般的でないプロパティも含まれます。このメタデータは、GetMetadata メソッドを使用して Cloud Storage 参照から取得できます。

// 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();
}

ファイル メタデータを更新する

ファイルのアップロードが完了したら、UpdateMetadata メソッドを使用して、いつでもファイル メタデータを更新できます。更新できるプロパティについて詳しくは、全一覧をご覧ください。メタデータに指定されているプロパティのみ更新され、それ以外のプロパティはすべて変更されずに残ります。

// 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();
}

書き込み可能なメタデータ プロパティは、空の文字列を渡すことで削除できます。

// 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();
}

エラーを処理する

メタデータの取得または更新時にエラーが発生する理由として、ファイルが存在しない、目的のファイルのアクセス権がユーザーにないなど、多くの理由が考えられます。エラーについて詳しくは、このドキュメントのエラーの処理のセクションをご覧ください。

カスタム メタデータ

カスタム メタデータは、std::string プロパティを含む std::map として指定できます。

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");

各ファイルについてアプリ固有のデータをカスタム メタデータに格納することは可能ですが、このタイプのデータを格納して同期するには、データベース(Firebase Realtime Database など)を使用することを強くおすすめします。

ファイル メタデータのプロパティ

ファイルに関するメタデータ プロパティの一覧は次のとおりです。

プロパティ タイプ 書き込み可能
bucket const char* いいえ
generation const char* いいえ
metageneration const char* いいえ
full_path const char* いいえ
name const char* いいえ
size int64_t いいえ
time_created int64_t いいえ
updated int64_t いいえ
cache_control const char* はい
content_disposition const char* はい
content_encoding const char* はい
content_language const char* はい
content_type const char* はい
download_urls std::vector<std::string> いいえ
custom_metadata std::map<std::string, std::string> はい

次のステップ

ファイルのアップロード、ダウンロード、更新は重要ですが、ファイルを削除できることも重要です。Cloud Storage からファイルを削除する方法を学習しましょう。