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

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

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

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

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

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

ملكية يكتب قابل للكتابة
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 الأمراض المنقولة جنسيا::ناقل <الأمراض المنقولة جنسيا::سلسلة> لا
custom_metadata std::map<std::string, std::string> نعم

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

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