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

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

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

تحتوي البيانات الوصفية للملفات على سمات شائعة، مثل 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* custom_metadata = metadata.custom_metadata();
custom_metadata->insert(std::make_pair("location", "Yosemite, CA, USA");
custom_metadata->insert(std::make_pair("activity", "Hiking");

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

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

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

الموقع Type قابلة للكتابة
bucket ثابت حرف* لا
generation ثابت حرف* لا
metageneration ثابت حرف* لا
full_path ثابت حرف* لا
name ثابت حرف* لا
size int64_t لا
time_created int64_t لا
updated int64_t لا
cache_control ثابت حرف* نعم
content_disposition ثابت حرف* نعم
content_encoding ثابت حرف* نعم
content_language ثابت حرف* نعم
content_type ثابت حرف* نعم
download_urls std::ect<std::string> لا
custom_metadata std::map<std::string, std::string> نعم

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

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