После загрузки файла в 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 Futurefuture = 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 Futurefuture = 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 Futurefuture = 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<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.