0Pricing
JavaScript Academy · درس

قراءة الملفات باستخدام FileReader

اقرؤوا الملفات المحددة كنصوص أو عناوين URL للبيانات.

قراءة الملفات باستخدام FileReader درس مجاني في JavaScript Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في JavaScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة JavaScript Academy 4 دروس في المجموع.

ما هو FileReader؟

يُعد FileReader واجهة برمجة تطبيقات في المتصفح تقرأ محتويات كائنات File وBlob بصورة غير متزامنة. تحصل على ملف من <input type="file"> وتقرأه على هيئة نص، أو عنوان URL للبيانات، أو بيانات ثنائية.

الحصول على ملف من حقل الإدخال

يكشف حقل إدخال الملفات عن قائمة files. ويوجد أول ملف محدد في الفهرس 0، وله خصائص مفيدة مثل name وsize وtype.

const input = document.querySelector('#picker');
const file = input.files[0];

console.log(file.name);
console.log(file.size);
console.log(file.type);

القراءة غير متزامنة

لا يعيد FileReader البيانات مباشرة. أرفق معالج onload، ثم استدعِ إحدى طرق القراءة. تصل النتيجة لاحقًا في reader.result.

const reader = new FileReader();
reader.onload = function () {
  console.log('done reading');
  console.log(reader.result);
};
reader.readAsText(file);

readAsText

تفكك readAsText ترميز الملف على هيئة سلسلة نصية، وهي مناسبة لملفات .txt و.csv أو JSON.

const reader = new FileReader();
reader.onload = () => {
  console.log('contents:', reader.result);
};
reader.readAsText(textFile);

readAsDataURL

تنشئ readAsDataURL عنوان URL للبيانات بترميز base64. وهذا مثالي لمعاينة صورة من خلال إسناده إلى img.src.

const reader = new FileReader();
reader.onload = () => {
  const img = document.querySelector('#preview');
  img.src = reader.result;
  console.log(reader.result.slice(0, 30));
};
reader.readAsDataURL(imageFile);

readAsArrayBuffer

توفر readAsArrayBuffer بيانات ثنائية خامًا في صورة ArrayBuffer، وهي مفيدة لتحليل تنسيقات الملفات بايتًا تلو الآخر.

const reader = new FileReader();
reader.onload = () => {
  const bytes = new Uint8Array(reader.result);
  console.log('byte count:', bytes.length);
  console.log('first byte:', bytes[0]);
};
reader.readAsArrayBuffer(binaryFile);

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

أرفق معالج onerror لالتقاط أخطاء القراءة، مثلما يحدث عندما يتعذر قراءة ملف.

const reader = new FileReader();
reader.onerror = () => {
  console.log('read failed:', reader.error.name);
};
reader.onload = () => console.log('ok');
reader.readAsText(file);

تتبّع التقدم

بالنسبة إلى الملفات الكبيرة، يوضح حدث onprogress عدد البايتات التي تم تحميلها حتى الآن، ما يفيد في أشرطة التقدم.

const reader = new FileReader();
reader.onprogress = (event) => {
  if (event.lengthComputable) {
    const percent = (event.loaded / event.total) * 100;
    console.log('loaded ' + percent.toFixed(0) + '%');
  }
};
reader.readAsArrayBuffer(bigFile);

التغليف داخل Promise

واجهة API المعتمدة على الأحداث غير سلسة. غلّفها داخل Promise لتتمكن من استخدام await وكتابة تعليمات برمجية أوضح.

function readText(file) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.onload = () => resolve(reader.result);
    reader.onerror = () => reject(reader.error);
    reader.readAsText(file);
  });
}

readText(file).then(text => console.log(text));

بديل حديث: file.text()

تتيح لك المتصفحات الحديثة استدعاء file.text() أو file.arrayBuffer() أو file.stream() مباشرة، وهي تعيد Promises. وتكون هذه الطرق أبسط من FileReader في كثير من الحالات.

async function show(file) {
  const text = await file.text();
  console.log(text);
}

show(file);

أهمية FileReader

يتيح لك FileReader معالجة الملفات التي يحددها المستخدم بالكامل داخل المتصفح: معاينة الصور، أو تحليل ملفات CSV، أو التحقق من الملفات قبل إرسالها. اختر طريقة القراءة وفقًا للبيانات التي تحتاج إليها: نص، أو عنوان URL للبيانات، أو بيانات ثنائية. ستستكشف بعد ذلك كائنات Blob وعناوين URL للكائنات.

const reader = new FileReader();
reader.onload = () => console.log('ready to upload');
reader.readAsDataURL(file);

اختبار سريع

أي طريقة من طرق FileReader تمنحك سلسلة base64 مناسبة لخاصية src الخاصة بمعاينة صورة؟

مراجعة: قراءة الملفات

لقد تعلمتم قراءة محتويات الملفات:

  • احصل على الملفات من input.files؛ فالقراءة غير متزامنة عبر onload.
  • تعيد readAsText وreadAsDataURL وreadAsArrayBuffer تنسيقات مختلفة.
  • عالج onerror وonprogress لتحسين المتانة.
  • تُعد file.text() وfile.arrayBuffer() الحديثتان بديلين يعتمدان على Promise.

الأسئلة الشائعة

هل درس «قراءة الملفات باستخدام FileReader» مجاني؟

نعم — نص درس «قراءة الملفات باستخدام FileReader» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة JavaScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة JavaScript Academy 4 دروس في المجموع.

ماذا ستتعلم في «قراءة الملفات باستخدام FileReader»؟

اقرؤوا الملفات المحددة كنصوص أو عناوين URL للبيانات. تتمرن على JavaScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ JavaScript Academy؟

لا تُشترط خبرة سابقة. JavaScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «قراءة الملفات باستخدام FileReader»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس JavaScript Academy هذا؟

نعم. كل درس في JavaScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. كائن FormData
  2. قراءة الملفات باستخدام FileReader
  3. Blobs وعناوين URL للكائنات
  4. رفع الملفات باستخدام Fetch
← العودة إلى JavaScript Academy