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

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

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

تحتوي البيانات الوصفية للملف على خصائص شائعة مثل name وsize وcontentType (يُشار إليها غالبًا باسم نوع MIME) بالإضافة إلى بعض الخصائص الأقل شيوعًا مثل contentDisposition وtimeCreated. يمكن استرداد هذه البيانات الوصفية من مرجع Cloud Storage باستخدام طريقة getMetadata(). تعرض طريقة getMetadata() كائن Promise يحتوي على البيانات الوصفية الكاملة، أو خطأ إذا تم رفض Promise.

Web

import { getStorage, ref, getMetadata } from "firebase/storage";

// Create a reference to the file whose metadata we want to retrieve
const storage = getStorage();
const forestRef = ref(storage, 'images/forest.jpg');

// Get metadata properties
getMetadata(forestRef)
  .then((metadata) => {
    // Metadata now contains the metadata for 'images/forest.jpg'
  })
  .catch((error) => {
    // Uh-oh, an error occurred!
  });

Web

// Create a reference to the file whose metadata we want to retrieve
var forestRef = storageRef.child('images/forest.jpg');

// Get metadata properties
forestRef.getMetadata()
  .then((metadata) => {
    // Metadata now contains the metadata for 'images/forest.jpg'
  })
  .catch((error) => {
    // Uh-oh, an error occurred!
  });

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

يمكنك تعديل البيانات الوصفية للملف في أي وقت بعد اكتمال تحميل الملف باستخدام طريقة updateMetadata(). يُرجى الرجوع إلى الـ قائمة الكاملة لمزيد من المعلومات حول الخصائص التي يمكن تعديلها. يتم تعديل الخصائص المحدّدة في البيانات الوصفية فقط، بينما تظل جميع الخصائص الأخرى بدون تغيير. تعرض طريقة updateMetadata() كائن Promise يحتوي على البيانات الوصفية الكاملة، أو خطأ إذا تم رفض Promise.

Web

import { getStorage, ref, updateMetadata } from "firebase/storage";

// Create a reference to the file whose metadata we want to change
const storage = getStorage();
const forestRef = ref(storage, 'images/forest.jpg');

// Create file metadata to update
const newMetadata = {
  cacheControl: 'public,max-age=300',
  contentType: 'image/jpeg'
};

// Update metadata properties
updateMetadata(forestRef, newMetadata)
  .then((metadata) => {
    // Updated metadata for 'images/forest.jpg' is returned in the Promise
  }).catch((error) => {
    // Uh-oh, an error occurred!
  });

Web

// Create a reference to the file whose metadata we want to change
var forestRef = storageRef.child('images/forest.jpg');

// Create file metadata to update
var newMetadata = {
  cacheControl: 'public,max-age=300',
  contentType: 'image/jpeg'
};

// Update metadata properties
forestRef.updateMetadata(newMetadata)
  .then((metadata) => {
    // Updated metadata for 'images/forest.jpg' is returned in the Promise
  }).catch((error) => {
    // Uh-oh, an error occurred!
  });

يمكنك حذف خاصية البيانات الوصفية من خلال ضبطها على null:

Web

import { getStorage, ref, updateMetadata } from "firebase/storage";

const storage = getStorage();
const forestRef = ref(storage, 'images/forest.jpg');

// Create file metadata with property to delete
const deleteMetadata = {
  contentType: null
};

// Delete the metadata property
updateMetadata(forestRef, deleteMetadata)
  .then((metadata) => {
    // metadata.contentType should be null
  }).catch((error) => {
    // Uh-oh, an error occurred!
  });

Web

// Create file metadata with property to delete
var deleteMetadata = {
  contentType: null
};

// Delete the metadata property
forestRef.updateMetadata(deleteMetadata)
  .then((metadata) => {
    // metadata.contentType should be null
  }).catch((error) => {
    // Uh-oh, an error occurred!
  });

التعامل مع الأخطاء

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

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

يمكنك تحديد بيانات وصفية مخصّصة ككائن يحتوي على خصائص String.

Web

const metadata = {
  customMetadata: {
    'location': 'Yosemite, CA, USA',
    'activity': 'Hiking'
  }
};

Web

var metadata = {
  customMetadata: {
    'location': 'Yosemite, CA, USA',
    'activity': 'Hiking'
  }
};

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

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

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

الموقع النوع قابل للكتابة
bucket سلسلة لا
generation سلسلة لا
metageneration سلسلة لا
fullPath سلسلة لا
name سلسلة لا
size رقم لا
timeCreated سلسلة لا
updated سلسلة لا
md5Hash سلسلة نعم عند التحميل، لا عند استخدام طريقة updateMetadata
cacheControl سلسلة نعم
contentDisposition سلسلة نعم
contentEncoding سلسلة نعم
contentLanguage سلسلة نعم
contentType سلسلة نعم
customMetadata كائن يحتوي على عمليات ربط من سلسلة إلى سلسلة نعم

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