0Pricing
JavaScript Academy · บทเรียน

การอ่านไฟล์ด้วย FileReader

อ่านไฟล์ที่เลือกเป็นข้อความหรือ URL ข้อมูล

การอ่านไฟล์ด้วย FileReader เป็นบทเรียน JavaScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน JavaScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส JavaScript Academy มีบทเรียนทั้งหมด 4 บทเรียน

FileReader คืออะไร

FileReader คือส่วนติดต่อโปรแกรมประยุกต์ของเบราว์เซอร์ที่อ่านเนื้อหาของออบเจ็กต์ File และ Blob แบบอะซิงโครนัส คุณรับไฟล์จาก <input type="file"> แล้วอ่านไฟล์นั้นเป็นข้อความ ที่อยู่ข้อมูล หรือข้อมูลไบนารีได้

การรับไฟล์จากช่องป้อนข้อมูล

ช่องป้อนข้อมูลไฟล์จะแสดงรายการ 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 หรือไฟล์เจสัน

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

readAsDataURL

readAsDataURL จะสร้างที่อยู่ข้อมูลแบบ base64 ซึ่งมีรูปแบบ data: เหมาะอย่างยิ่งสำหรับแสดงตัวอย่างรูปภาพโดยกำหนดค่าให้กับ 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 จะรายงานจำนวน bytes ที่โหลดแล้วจนถึงขณะนั้น ซึ่งมีประโยชน์สำหรับแถบแสดงความคืบหน้า

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);

การครอบด้วยพรอมิส

ส่วนติดต่อแบบใช้เหตุการณ์นี้ใช้งานไม่สะดวกนัก ให้ครอบด้วยพรอมิสเพื่อให้คุณใช้ 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() ได้โดยตรง โดยเมธอดเหล่านี้จะคืนพรอมิส จึงง่ายกว่า FileReader ในหลายกรณี

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

show(file);

เหตุใด FileReader จึงสำคัญ

FileReader ช่วยให้คุณประมวลผลไฟล์ที่ผู้ใช้เลือกได้ทั้งหมดภายในเบราว์เซอร์ ไม่ว่าจะเป็นการแสดงตัวอย่างรูปภาพ การวิเคราะห์ไฟล์ข้อมูลคั่นด้วยจุลภาค หรือการตรวจสอบไฟล์ก่อนอัปโหลด เลือกเมธอดการอ่านตามชนิดข้อมูลที่ต้องการ ได้แก่ ข้อความ ที่อยู่ข้อมูล หรือข้อมูลไบนารี จากนั้นคุณจะได้สำรวจออบเจ็กต์ไบนารีและที่อยู่ของออบเจ็กต์

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() สมัยใหม่เป็นทางเลือกที่ทำงานบนพรอมิส

คำถามที่พบบ่อย

บทเรียน “การอ่านไฟล์ด้วย FileReader” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การอ่านไฟล์ด้วย FileReader” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส JavaScript Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส JavaScript Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การอ่านไฟล์ด้วย FileReader”

อ่านไฟล์ที่เลือกเป็นข้อความหรือ URL ข้อมูล คุณปฏิบัติ JavaScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน JavaScript Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน JavaScript Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การอ่านไฟล์ด้วย FileReader” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน JavaScript Academy นี้ได้ไหม

ได้ บทเรียน JavaScript Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ออบเจ็กต์ FormData
  2. การอ่านไฟล์ด้วย FileReader
  3. Blob และ URL ของออบเจ็กต์
  4. การอัปโหลดไฟล์ด้วย Fetch
← กลับไปที่ JavaScript Academy