استخدام البيانات الوصفية للملفات مع Cloud Storage لـ C++

بعد تحميل ملف إلى مرجع Cloud Storage، يمكنك أيضًا الحصول على البيانات الوصفية للملف وتعديلها، على سبيل المثال لتعديل نوع المحتوى. يمكن للملفات أيضًا تخزين أزواج المفاتيح والقيم المخصّصة مع بيانات وصفية إضافية للملفات.

الحصول على البيانات الوصفية للملف

تحتوي البيانات الوصفية للملف على سمات شائعة، مثل name وsize وcontent_type (يُشار إليها غالبًا باسم نوع MIME)، بالإضافة إلى بعض السمات الأقل شيوعًا، مثل content_disposition وtime_created. يمكن استرداد هذه البيانات الوصفية من مرجع Cloud Storage باستخدام طريقة 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();
}

تعديل البيانات الوصفية للملف

يمكنك تعديل البيانات الوصفية للملف في أي وقت بعد اكتمال تحميل الملف باستخدام طريقة UpdateMetadata. يمكنك الرجوع إلى القائمة الكاملة لمزيد من المعلومات حول السمات التي يمكن تعديلها. يتم تعديل السمات المحدّدة في البيانات الوصفية فقط، وتبقى جميع السمات الأخرى بدون تعديل.

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

يمكنك حذف سمات البيانات الوصفية القابلة للكتابة من خلال تمرير السلسلة الفارغة:

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

معالجة الأخطاء

هناك عدة أسباب لحدوث أخطاء عند الحصول على البيانات الوصفية أو تعديلها، بما في ذلك عدم توفّر الملف أو عدم حصول المستخدم على إذن للوصول إلى الملف المطلوب. يمكنك الاطّلاع على مزيد من المعلومات حول الأخطاء في قسم معالجة الأخطاء في المستندات.

البيانات الوصفية المخصّصة

يمكنك تحديد بيانات وصفية مخصّصة كـ std::map يحتوي على سمات 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");

يمكنك تخزين البيانات الخاصة بالتطبيق لكل ملف في البيانات الوصفية المخصّصة، ولكننا ننصح بشدة باستخدام قاعدة بيانات (مثل Firebase Realtime Database) لتخزين هذا النوع من البيانات ومزامنته.

خصائص البيانات الوصفية للملف

تتوفّر أدناه قائمة كاملة بسمات البيانات الوصفية في ملف:

الموقع النوع قابل للكتابة
bucket const char*‎ لا
generation const char*‎ لا
metageneration const char*‎ لا
full_path const char*‎ لا
name const char*‎ لا
size int64_t لا
time_created int64_t لا
updated int64_t لا
cache_control const char*‎ نعم
content_disposition const char*‎ نعم
content_encoding const char*‎ نعم
content_language const char*‎ نعم
content_type const char*‎ نعم
download_urls std::vector<std::string> لا
custom_metadata std::map<std::string, std::string> نعم

الخطوات التالية

يعد تحميل الملفات وتنزيلها وتحديثها أمرًا مهمًا، ولكن كذلك القدرة على إزالتها. كيفية حذف الملفات من "Cloud Storage"