Po przesłaniu pliku do Cloud Storage możesz również wyświetlić i zaktualizować metadane pliku, na przykład aby zmienić typ treści. Pliki mogą też przechowywać niestandardowe pary klucz-wartość z dodatkowymi metadanymi pliku.
Pobieranie metadanych
Metadane pliku zawierają typowe właściwości, takie jak name
, size
i content_type
(często określane jako typ MIME), a także mniej typowe, takie jak content_disposition
i time_created
. Te metadane można pobrać z pliku referencyjnego Cloud Storage, używając metody 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(); }
Aktualizowanie metadanych pliku
Po zakończeniu przesyłania pliku możesz zaktualizować jego metadane w dowolnym momencie, używając metody UpdateMetadata
. Więcej informacji o tym, które właściwości można aktualizować, znajdziesz na tej liście. Zaktualizowane zostaną tylko właściwości określone w metadanych. Wszystkie pozostałe pozostaną bez zmian.
// 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(); }
Aby usunąć właściwości meta danych, które można zapisać, możesz przekazać pusty ciąg znaków:
// 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(); }
Obsługa błędów
Błędy podczas pobierania lub aktualizowania metadanych mogą wystąpić z różnych powodów, na przykład z powodu braku pliku lub braku uprawnień użytkownika do dostępu do odpowiedniego pliku. Więcej informacji o błędach znajdziesz w sekcji Przetwarzanie błędów w dokumentacji.
Niestandardowe metadane
Niestandardowe metadane możesz określić jako std::map
zawierający std::string
właściwości.
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");
Dane dotyczące poszczególnych aplikacji możesz przechowywać w metadanych niestandardowych, ale zdecydowanie zalecamy używanie bazy danych (np. Firebase Realtime Database) do przechowywania i synchronizowania tego typu danych.
Właściwości metadanych pliku
Poniżej znajdziesz pełną listę właściwości metadanych pliku:
Właściwość | Typ | Możliwość zapisu |
---|---|---|
bucket |
const char* | NIE |
generation |
const char* | NIE |
metageneration |
const char* | NIE |
full_path |
const char* | NIE |
name |
const char* | NIE |
size |
int64_t | NIE |
time_created |
int64_t | NIE |
updated |
int64_t | NIE |
cache_control |
const char* | TAK |
content_disposition |
const char* | TAK |
content_encoding |
const char* | TAK |
content_language |
const char* | TAK |
content_type |
const char* | TAK |
download_urls |
std::vector<std::string> | NIE |
custom_metadata |
std::map<std::string, std::string> | TAK |
Następne kroki
Przesyłanie, pobieranie i aktualizowanie plików jest ważne, ale równie ważne jest ich usuwanie. Dowiedz się, jak usuwać pliki z Cloud Storage.