После загрузки файла в 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 | константный символ* | НЕТ |
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 .