После загрузки файла в Cloud Storage вы также можете получить и обновить метаданные файла, например, для просмотра или обновления типа содержимого. Файлы также могут хранить пользовательские пары ключ/значение с дополнительными метаданными.
Получить метаданные файла
Метаданные файла содержат общие свойства, такие как name , size и contentType (часто называемый MIME-типом), а также некоторые менее распространенные, например, contentDisposition и timeCreated . Эти метаданные можно получить из ссылки на Cloud Storage с помощью метода getMetadata() .
Kotlin
// Create a storage reference from our app val storageRef = storage.reference // Get reference to the file val forestRef = storageRef.child("images/forest.jpg")
forestRef.metadata.addOnSuccessListener { metadata -> // Metadata now contains the metadata for 'images/forest.jpg' }.addOnFailureListener { // Uh-oh, an error occurred! }
Java
// Create a storage reference from our app StorageReference storageRef = storage.getReference(); // Get reference to the file StorageReference forestRef = storageRef.child("images/forest.jpg");
forestRef.getMetadata().addOnSuccessListener(new OnSuccessListener<StorageMetadata>() { @Override public void onSuccess(StorageMetadata storageMetadata) { // Metadata now contains the metadata for 'images/forest.jpg' } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception exception) { // Uh-oh, an error occurred! } });
Обновить метаданные файла
Вы можете обновить метаданные файла в любое время после завершения загрузки файла, используя метод updateMetadata() . Для получения дополнительной информации о том, какие свойства можно обновить, обратитесь к полному списку . Обновляются только свойства, указанные в метаданных, все остальные остаются без изменений.
Kotlin
// Create a storage reference from our app val storageRef = storage.reference // Get reference to the file val forestRef = storageRef.child("images/forest.jpg")
// Create file metadata including the content type val metadata = storageMetadata { contentType = "image/jpg" setCustomMetadata("myCustomProperty", "myValue") } // Update metadata properties forestRef.updateMetadata(metadata).addOnSuccessListener { updatedMetadata -> // Updated metadata is in updatedMetadata }.addOnFailureListener { // Uh-oh, an error occurred! }
Java
// Create a storage reference from our app StorageReference storageRef = storage.getReference(); // Get reference to the file StorageReference forestRef = storageRef.child("images/forest.jpg");
// Create file metadata including the content type StorageMetadata metadata = new StorageMetadata.Builder() .setContentType("image/jpg") .setCustomMetadata("myCustomProperty", "myValue") .build(); // Update metadata properties forestRef.updateMetadata(metadata) .addOnSuccessListener(new OnSuccessListener<StorageMetadata>() { @Override public void onSuccess(StorageMetadata storageMetadata) { // Updated metadata is in storageMetadata } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception exception) { // Uh-oh, an error occurred! } });
Удалить доступные для записи свойства метаданных можно, передав null :
Kotlin
// Create file metadata with property to delete val metadata = storageMetadata { contentType = null } // Delete the metadata property forestRef.updateMetadata(metadata).addOnSuccessListener { updatedMetadata -> // updatedMetadata.contentType should be null }.addOnFailureListener { // Uh-oh, an error occurred! }
Java
// Create file metadata with property to delete StorageMetadata metadata = new StorageMetadata.Builder() .setContentType(null) .build(); // Delete the metadata property forestRef.updateMetadata(metadata) .addOnSuccessListener(new OnSuccessListener<StorageMetadata>() { @Override public void onSuccess(StorageMetadata storageMetadata) { // metadata.contentType should be null } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception exception) { // Uh-oh, an error occurred! } });
Обработка ошибок
При получении или обновлении метаданных может возникать ряд ошибок, в том числе из-за того, что файл не существует или у пользователя нет прав доступа к нужному файлу. Более подробную информацию об ошибках можно найти в разделе «Обработка ошибок» документации.
Пользовательские метаданные
Вы можете указать пользовательские метаданные, используя метод setCustomMetadata() в классе StorageMetadata.Builder .
Kotlin
val metadata = storageMetadata { setCustomMetadata("location", "Yosemite, CA, USA") setCustomMetadata("activity", "Hiking") }
Java
StorageMetadata metadata = new StorageMetadata.Builder() .setCustomMetadata("location", "Yosemite, CA, USA") .setCustomMetadata("activity", "Hiking") .build();
Для каждого файла можно хранить данные, специфичные для приложения, в пользовательских метаданных, но мы настоятельно рекомендуем использовать базу данных (например, Firebase Realtime Database ) для хранения и синхронизации данных такого типа.
Свойства метаданных файла
Полный список метаданных файла представлен ниже:
| Property Getter | Тип | Сеттер существует |
|---|---|---|
getBucket | String | НЕТ |
getGeneration | String | НЕТ |
getMetadataGeneration | String | НЕТ |
getPath | String | НЕТ |
getName | String | НЕТ |
getSizeBytes | long | НЕТ |
getCreationTimeMillis | long | НЕТ |
getUpdatedTimeMillis | long | НЕТ |
getMd5Hash | String | НЕТ |
getCacheControl | String | ДА |
getContentDisposition | String | ДА |
getContentEncoding | String | ДА |
getContentLanguage | String | ДА |
getContentType | String | ДА |
getCustomMetadata | String | ДА |
getCustomMetadataKeys | Set<String> | НЕТ |
Загрузка, скачивание и обновление файлов важны, но не менее важно уметь их удалять. Давайте разберемся, как удалять файлы из Cloud Storage .