بعد تحميل ملف إلى Cloud Storage مرجع، يمكنك أيضًا الحصول على البيانات الوصفية للملف وتعديلها، مثلاً لتعديل نوع المحتوى. يمكن للملفات أيضًا تخزين أزواج مخصّصة من المفاتيح والقيم مع بيانات وصفية إضافية للملف.
الحصول على البيانات الوصفية للملف
تحتوي البيانات الوصفية للملف على خصائص شائعة مثل name وsize وcontent_type (يُشار إليها غالبًا باسم نوع MIME) بالإضافة إلى بعض الخصائص الأقل شيوعًا مثل content_disposition وtime_created. يمكن استرداد هذه البيانات الوصفية من مرجع باستخدام طريقة.Cloud StorageGetMetadata
// Create reference to the file whose metadata we want to retrieve StorageReference forest_ref = storage_ref.Child("images/forest.jpg"); // Get metadata properties Futurefuture = 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 Futurefuture = 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 Futurefuture = 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.