การอ่านไฟล์ด้วย 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ออบเจ็กต์ FormData
- การอ่านไฟล์ด้วย FileReader
- Blob และ URL ของออบเจ็กต์
- การอัปโหลดไฟล์ด้วย Fetch