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

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

Dosya meta verilerini alma

Dosya meta verileri, name, size ve content_type (genellikle MIME türü olarak adlandırılır) gibi yaygın özelliklerin yanı sıra content_disposition ve time_created gibi daha az yaygın olanları da 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ş dizeyi ileterek 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ı İş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ı. Hatalar hakkında daha fazla bilgiyi dokümanların Hataları İşleme bölümünde bulabilirsiniz.

Özel Meta Veriler

Özel meta verileri, std::string özelliklerini içeren bir std::map olarak belirtebilirsiniz.

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");

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

Dosya Meta Verisi Ö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

Dosyaları yüklemek, indirmek ve güncellemek önemlidir ancak bunları kaldırabilmek de önemlidir. Cloud Storage'dan dosyaları nasıl sileceğinizi öğrenelim.