Используйте метаданные файлов с Cloud Storage для C++

После загрузки файла в Cloud Storage вы также можете получить и обновить метаданные файла, например, чтобы обновить тип контента. Файлы также могут хранить пользовательские пары ключ/значение с дополнительными метаданными файла.

Получить метаданные файла

Метаданные файла содержат общие свойства, такие как name , size и content_type (часто называемые MIME-типом), а также некоторые менее распространенные свойства, такие как content_disposition и time_created . Эти метаданные можно получить из ссылки Cloud Storage с помощью метода 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();
}

Обновить метаданные файла

Вы можете обновить метаданные файла в любое время после завершения загрузки файла с помощью метода 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::map содержащего свойства std::string .

std::map* 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 константный символ* НЕТ
generation константный символ* НЕТ
metageneration константный символ* НЕТ
full_path константный символ* НЕТ
name константный символ* НЕТ
size int64_t НЕТ
time_created int64_t НЕТ
updated int64_t НЕТ
cache_control константный символ* ДА
content_disposition константный символ* ДА
content_encoding константный символ* ДА
content_language константный символ* ДА
content_type константный символ* ДА
download_urls std::vector<std::string> НЕТ
custom_metadata std::map<std::string, std::string> ДА

Следующие шаги

Загрузка, скачивание и обновление файлов важны, но не менее важна и возможность их удаления. Давайте узнаем, как удалить файлы из Cloud Storage .