File และ FileReader เป็น API สำคัญในการจัดการไฟล์ฝั่งไคลเอนต์ (Client-side) โดยไม่ต้องอัปโหลดไปเซิร์ฟเวอร์ File สืบทอดมาจาก Blob และแทนไฟล์ที่ผู้ใช้เลือกผ่าน <input type="file"> ส่วน FileReader ใช้อ่านเนื้อหาไฟล์แบบอะซิงโครนัส
ตัวอย่างโค้ด
<!DOCTYPE html>
<html lang="th">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>File และ FileReader</title>
<style>
body { font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; }
.result, .sample { font-size: 18px; font-weight: 500; color: rebeccapurple; }
.result { color: red; }
</style>
</head>
<body>
<h1>File และ FileReader ใน JavaScript</h1>
<input type="file" accept="text/*" onchange="displayFile(this)" />
<div class="result"></div>
<br />
<div class="sample"></div>
<h3>เลือกไฟล์ข้อความเพื่อดูรายละเอียดและเนื้อหา</h3>
<script>
const resEle = document.querySelector(".result");
const sampleEle = document.querySelector(".sample");
function displayFile(input) {
const file = input.files[0];
resEle.innerHTML += "ชื่อไฟล์ = " + file.name + "<br>";
resEle.innerHTML += "ขนาด = " + file.size + " ไบต์ <br>";
resEle.innerHTML += "ประเภท = " + file.type + "<br>";
const reader = new FileReader();
reader.readAsText(file);
reader.onload = function () {
sampleEle.innerHTML += reader.result;
};
reader.onerror = function () {
sampleEle.innerHTML += "เกิดข้อผิดพลาด: " + reader.error;
};
}
</script>
</body>
</html>
ผลลัพธ์

เมื่อเลือกไฟล์:

เมธอดหลักของ FileReader
| เมธอด | คำอธิบาย |
|---|---|
readAsText(file, encoding) | อ่านเป็นข้อความ (ค่าเริ่มต้น UTF-8) |
readAsDataURL(file) | อ่านเป็น Data URL (base64) — ใช้แสดงรูปภาพได้ทันที |
readAsArrayBuffer(file) | อ่านเป็น ArrayBuffer — สำหรับข้อมูลไบนารี |
readAsBinaryString(file) | อ่านเป็นสตริงไบนารี (เลิกใช้แล้ว ใช้ ArrayBuffer แทน) |
เหตุการณ์ (Events)
onload— อ่านสำเร็จonerror— เกิดข้อผิดพลาดonprogress— กำลังอ่าน (สำหรับไฟล์ใหญ่)onabort— ผู้ใช้ยกเลิก
หมายเหตุ
FileReader ทำงานแบบอะซิงโครนัส ไม่บล็อก UI สามารถใช้ readAsDataURL กับรูปภาพเพื่อแสดงตัวอย่าง (preview) ก่อนอัปโหลดได้