Po przesłaniu pliku do pliku referencyjnego Cloud Storage możesz także pobrać i zaktualizować metadane pliku, na przykład w celu wyświetlenia lub zaktualizowania typu zawartości. Pliki mogą również przechowywać niestandardowe pary klucz/wartość z dodatkowymi metadanymi pliku.
Pobierz metadane pliku
Metadane pliku zawierają typowe właściwości, takie jak name
, size
i contentType
(często określane jako typ MIME), oprócz niektórych mniej powszechnych właściwości, takich jak contentDisposition
i timeCreated
. Te metadane można pobrać z odwołania do Cloud Storage za pomocą metody getMetadata()
.
Kotlin+KTX
// 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! } });
Zaktualizuj metadane pliku
Metadane pliku można zaktualizować w dowolnym momencie po zakończeniu przesyłania pliku za pomocą metody updateMetadata()
. Zapoznaj się z pełną listą, aby uzyskać więcej informacji na temat właściwości, które można zaktualizować. Aktualizowane są tylko właściwości określone w metadanych, wszystkie inne pozostają niezmienione.
Kotlin+KTX
// 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! } });
Możesz usunąć zapisywalne właściwości metadanych, przekazując null
:
Kotlin+KTX
// 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! } });
Obsługa błędów
Istnieje wiele powodów, dla których mogą wystąpić błędy podczas pobierania lub aktualizowania metadanych, w tym plik nie istnieje lub użytkownik nie ma uprawnień dostępu do żądanego pliku. Więcej informacji na temat błędów można znaleźć w sekcji Obsługa błędów w dokumentacji.
Niestandardowe metadane
Niestandardowe metadane można określić za pomocą metody setCustomMetadata()
w klasie StorageMetadata.Builder
.
Kotlin+KTX
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();
Możesz przechowywać dane aplikacji dla każdego pliku w niestandardowych metadanych, ale zdecydowanie zalecamy korzystanie z bazy danych (takiej jak Baza danych czasu rzeczywistego Firebase ) do przechowywania i synchronizowania tego typu danych.
Właściwości metadanych pliku
Pełna lista właściwości metadanych w pliku jest dostępna poniżej:
Pobieracz właściwości | Typ | Seter istnieje |
---|---|---|
getBucket | String | NIE |
getGeneration | String | NIE |
getMetadataGeneration | String | NIE |
getPath | String | NIE |
getName | String | NIE |
getSizeBytes | long | NIE |
getCreationTimeMillis | long | NIE |
getUpdatedTimeMillis | long | NIE |
getMd5Hash | String | NIE |
getCacheControl | String | TAK |
getContentDisposition | String | TAK |
getContentEncoding | String | TAK |
getContentLanguage | String | TAK |
getContentType | String | TAK |
getCustomMetadata | String | TAK |
getCustomMetadataKeys | Set<String> | NIE |
Przesyłanie, pobieranie i aktualizowanie plików jest ważne, ale równie ważna jest możliwość ich usuwania. Nauczmy się, jak usuwać pliki z Cloud Storage.