C++ için Cloud Storage ile dosya meta verilerini kullanın

Cloud Storage referansına bir dosya yükledikten sonra, örneğin içerik türünü güncellemek için dosya meta verilerini de alabilir ve güncelleyebilirsiniz. Dosyalar ayrıca ek dosya meta verileriyle özel anahtar/değer çiftlerini de depolayabilir.

Dosya Meta Verilerini Alın

İçerik meta gibi yaygın özelliklerini içeren name , size ve content_type gibi bazı daha az yaygın olanlara ilave olarak, (genellikle MIME türü olarak adlandırılır) content_disposition ve time_created . Bu meta veriler kullanılarak bir Cloud Storage referans alınabilir GetMetadata yöntemi.

// 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üncelle

Sen kullanarak dosya yükleme tamamlanıncaya sonra herhangi bir zamanda dosya meta güncelleyebilirsiniz UpdateMetadata yöntemi. Bakın tam listesi özellikleri güncellenebilir ne daha fazla bilgi için. Yalnızca meta verilerde belirtilen özellikler güncellenir, diğerleri 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ı İşle

Dosyanın mevcut olmaması veya kullanıcının istenen dosyaya erişim izninin olmaması da dahil olmak üzere, meta verileri alırken veya güncellerken hataların oluşmasının birkaç nedeni vardır. Hatalar hakkında daha fazla bilgi bulunabilir Sap Hataları dokümanlar bölümünde.

Özel Meta Veriler

Bir sıra özel meta belirtebilirsiniz std::map içeren std::string özelliklerini.

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

Sen özel meta her dosya için uygulamaya özgü verileri saklayabilir, ama biz çok (örneğin bir veritabanı kullanarak tavsiye Firebase Gerçek Zamanlı Veritabanı depolamak ve bu tür verileri senkronize etmek).

Dosya Meta Veri Özellikleri

Bir dosyadaki meta veri özelliklerinin tam listesi aşağıda mevcuttur:

Emlak Tür yazılabilir
bucket sabit karakter* HAYIR
generation sabit karakter* HAYIR
metageneration sabit karakter* HAYIR
full_path sabit karakter* HAYIR
name sabit karakter* HAYIR
size int64_t HAYIR
time_created int64_t HAYIR
updated int64_t HAYIR
cache_control sabit karakter* EVET
content_disposition sabit karakter* EVET
content_encoding sabit karakter* EVET
content_language sabit karakter* EVET
content_type sabit karakter* EVET
download_urls std::vector<std::string> HAYIR
custom_metadata std::map<std::string, std::string> EVET

Sonraki adımlar

Dosyaları karşıya yüklemek, indirmek ve güncellemek önemlidir, ancak bunları kaldırabilmek de önemlidir. En öğrenmek Let dosyaları silmek Bulut Storage'den.