Używanie metadanych pliku w Cloud Storage dla C++

Po przesłaniu pliku do Cloud Storage referencyjnego możesz też pobrać i zaktualizować metadane pliku, np. aby zaktualizować typ treści. Pliki mogą też przechowywać niestandardowe pary klucz/wartość z dodatkowymi metadanymi pliku.

Pobieranie metadanych pliku

Metadane pliku zawierają typowe właściwości, takie jak name, sizecontent_type (często nazywany typem MIME), a także mniej popularne, takie jak content_dispositiontime_created. Te metadane można pobrać z Cloud Storage za pomocą 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
Future future = 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

Metadane pliku możesz zaktualizować w dowolnym momencie po zakończeniu przesyłania pliku, korzystając z metody UpdateMetadata. Więcej informacji o tym, które właściwości można aktualizować, znajdziesz na pełnej liście. Aktualizowane są tylko właściwości określone w metadanych, a wszystkie pozostałe pozostają 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
Future future = 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 metadanych, do których można zapisywać dane, przekaż pusty ciąg znaków:

// Create file metadata with property to delete
StorageMetadata new_metadata;
new_metadata.set_content_type("");

// Delete the metadata property
Future future = 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

Istnieje wiele powodów, dla których podczas pobierania lub aktualizowania metadanych mogą wystąpić błędy. Może to być np. brak pliku lub brak uprawnień użytkownika do uzyskania dostępu do wybranego pliku. Więcej informacji o błędach znajdziesz w sekcji Obsługa błędów w dokumentacji.

Niestandardowe metadane

Możesz określić metadane niestandardowe jako element std::map zawierający właściwości 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");

Możesz przechowywać dane dotyczące poszczególnych aplikacji 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

Pełna lista właściwości metadanych pliku jest dostępna poniżej:

Właściwość Typ Z możliwością 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 możliwość ich usuwania też. Dowiedz się, jak usuwać pliki z Cloud Storage.