C++ için Cloud Storage ile dosya meta verilerini kullanma

Cloud Storage referansına bir dosya yükledikten sonra, dosya meta verilerini de alıp güncelleyebilirsiniz (ör. içerik türünü güncellemek için). Dosyalar, ek dosya meta verileriyle özel anahtar/değer çiftleri de depolayabilir.

Dosya meta verilerini alma

Dosya meta verileri, content_disposition ve time_created gibi daha az yaygın olan özelliklerin yanı sıra name, size ve content_type (genellikle MIME türü olarak adlandırılır) gibi yaygın özellikleri içerir. Bu meta veriler, GetMetadata yöntemi kullanılarak bir Cloud Storage referansından alınabilir.

// 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();
}

Dosya meta verilerini güncelleme

Dosya yükleme işlemi tamamlandıktan sonra UpdateMetadata yöntemini kullanarak dosya meta verilerini istediğiniz zaman güncelleyebilirsiniz. Hangi özelliklerin güncellenebileceği hakkında daha fazla bilgi için tam listeye bakın. Yalnızca meta verilerde belirtilen özellikler güncellenir, diğer tüm özellikler değiştirilmeden bırakılır.

// 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();
}

Boş dize göndererek yazılabilir meta veri özelliklerini silebilirsiniz:

// 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();
}

Hataları işleme

Meta verileri alma veya güncelleme sırasında hataların oluşmasının çeşitli nedenleri vardır. Örneğin, dosyanın mevcut olmaması veya kullanıcının istenen dosyaya erişme izninin olmaması bu nedenler arasındadır. Hatalarla ilgili daha fazla bilgiyi dokümanların Hataları ele alma bölümünde bulabilirsiniz.

Özel Meta Veriler

Özel meta verileri, std::string mülkleri içeren bir std::map olarak belirtebilirsiniz.

std::map* custom_metadata = metadata.custom_metadata();
custom_metadata->insert(std::make_pair("location", "Yosemite, CA, USA");
custom_metadata->insert(std::make_pair("activity", "Hiking");

Her dosyanın uygulamaya özgü verilerini özel meta verilerde saklayabilirsiniz ancak bu tür verileri depolamak ve senkronize etmek için bir veritabanı (Firebase Realtime Database gibi) kullanmanızı önemle tavsiye ederiz.

Dosya Meta Veri Özellikleri

Bir dosyadaki meta veri özelliklerinin tam listesini aşağıda bulabilirsiniz:

Özellik Tür Yazılabilir
bucket const char* HAYIR
generation const char* HAYIR
metageneration const char* HAYIR
full_path const char* HAYIR
name const char* HAYIR
size int64_t HAYIR
time_created int64_t HAYIR
updated int64_t HAYIR
cache_control const char* EVET
content_disposition const char* EVET
content_encoding const char* EVET
content_language const char* EVET
content_type const char* EVET
download_urls std::vector<std::string> HAYIR
custom_metadata std::map<std::string, std::string> EVET

Sonraki adımlar

Dosya yükleme, indirme ve güncelleme kadar dosyaları kaldırabilmek de önemlidir. Cloud Storage'den dosyaları nasıl sileceğinizi öğrenelim.