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

อินพุตไฟล์และการอ่านข้อมูลไฟล์

จัดการ อ่านข้อมูลกำกับของไฟล์ และแสดงตัวอย่างรูปภาพด้วย FileReader

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

ยินดีต้อนรับ

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

องค์ประกอบช่องกรอกไฟล์

องค์ประกอบ `` ไม่สามารถถูกควบคุมโดยพร็อพ value ของ React ได้ เพราะเป็นองค์ประกอบแบบไม่ถูกควบคุมเสมอ ให้อ่านไฟล์ที่เลือกจาก `e.target.files[0]` ในตัวจัดการ onChange
function FileInput() {
  const handleChange = (e) => {
    const file = e.target.files[0];
    console.log(file.name, file.size, file.type);
  };
  return <input type="file" onChange={handleChange} />;
}

คุณสมบัติของออบเจ็กต์ไฟล์

ออบเจ็กต์ File ขยายความสามารถจาก Blob และมี: `name` (ชื่อไฟล์), `size` (ไบต์), `type` (ประเภท MIME เช่น 'image/png') และ `lastModified` (เวลาประทับ) ให้อ่านค่าเหล่านี้ก่อนอัปโหลดหรือประมวลผล

การยอมรับประเภทไฟล์เฉพาะ

ใช้แอตทริบิวต์ `accept` เพื่อแจ้งเบราว์เซอร์เป็นแนวทางว่าควรแสดงไฟล์ประเภทใดบ้าง ใช้ประเภทรูปแบบ MIME และนามสกุลไฟล์ร่วมกัน และตรวจสอบฝั่งเซิร์ฟเวอร์ด้วยเสมอ
<input type="file" accept="image/png,image/jpeg,.pdf" />

การเลือกไฟล์หลายไฟล์

เพิ่มแอตทริบิวต์ `multiple` เพื่อให้เลือกไฟล์หลายไฟล์ได้ `e.target.files` จะส่งคืน FileList ให้แปลงเป็นอาร์เรย์ด้วย `Array.from()` เพื่อใช้เมธอดของอาร์เรย์
<input type="file" multiple />

const files = Array.from(e.target.files);

การแสดงตัวอย่างรูปภาพด้วย URL.createObjectURL

สร้าง URL ชั่วคราวสำหรับแสดงตัวอย่างไฟล์รูปภาพที่เลือกโดยใช้ `URL.createObjectURL(file)` เมื่อใช้งานเสร็จแล้ว อย่าลืมเรียกคืนด้วย `URL.revokeObjectURL` เพื่อคืนหน่วยความจำ
const [preview, setPreview] = useState(null);

const handleChange = (e) => {
  const file = e.target.files[0];
  if (file) setPreview(URL.createObjectURL(file));
};

useEffect(() => {
  return () => { if (preview) URL.revokeObjectURL(preview); };
}, [preview]);

{preview && <img src={preview} alt="Preview" />}

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

ใช้ API ของ `FileReader` เพื่ออ่านเนื้อหาไฟล์เป็นข้อความหรือ URL ข้อมูล เรียก `reader.readAsText(file)` สำหรับไฟล์ข้อความ หรือ `reader.readAsDataURL(file)` สำหรับไฟล์ไบนารี เช่น รูปภาพ
const reader = new FileReader();
reader.onload = (e) => setContent(e.target.result);
reader.readAsText(file);

การตรวจสอบขนาดไฟล์

ตรวจสอบขนาดไฟล์ฝั่งไคลเอ็นต์ก่อนอัปโหลด ปฏิเสธไฟล์ที่มีขนาดเกินค่าที่กำหนด และแสดงข้อความข้อผิดพลาด
const MAX_SIZE = 5 * 1024 * 1024; // 5 MB
if (file.size > MAX_SIZE) {
  setError('File must be under 5 MB');
  return;
}

การล้างช่องกรอกไฟล์

คุณไม่สามารถล้างช่องกรอกไฟล์ด้วยการตั้งค่าของมันได้ เพราะเป็นแบบอ่านอย่างเดียว ให้รีเซ็ตโดยตรงผ่านรีเฟอเรนซ์ หรือเปลี่ยนพร็อพ `key` ของช่องกรอกเพื่อบังคับให้เมานต์ใหม่
const inputRef = useRef();
const clear = () => { inputRef.current.value = ''; };
<input ref={inputRef} type="file" />

การเก็บรีเฟอเรนซ์ไฟล์ในสถานะ

เก็บออบเจ็กต์ File เองไว้ในสถานะ ไม่ใช่เพียงชื่อหรือ URL วิธีนี้ทำให้คุณอัปโหลดไฟล์ภายหลังได้โดยไม่ต้องอ่านไฟล์นั้นจาก DOM ซ้ำ
const [file, setFile] = useState(null);
const handleChange = (e) => setFile(e.target.files[0] || null);

ตรวจสอบความเข้าใจอย่างรวดเร็ว

เมธอดใดสร้าง URL ชั่วคราวสำหรับแสดงตัวอย่างไฟล์รูปภาพที่เลือกในเบราว์เซอร์

สรุปทบทวน

อ่านไฟล์ที่เลือกจาก e.target.files ใช้ URL.createObjectURL สำหรับแสดงตัวอย่าง ใช้ FileReader สำหรับอ่านเนื้อหา ตรวจสอบขนาดฝั่งไคลเอ็นต์ และเก็บออบเจ็กต์ File ไว้ในสถานะเพื่ออัปโหลดภายหลัง

ถัดไป

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

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

บทเรียน “อินพุตไฟล์และการอ่านข้อมูลไฟล์” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “อินพุตไฟล์และการอ่านข้อมูลไฟล์”

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

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

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

บทเรียน “อินพุตไฟล์และการอ่านข้อมูลไฟล์” ใช้เวลานานแค่ไหน

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

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

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

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

  1. อินพุตแบบไม่ควบคุมด้วย useRef
  2. อินพุตไฟล์และการอ่านข้อมูลไฟล์
  3. ส่วนติดต่อผู้ใช้อัปโหลดไฟล์แบบลากและวาง
  4. การอัปโหลดไฟล์ไปยังแบ็กเอนด์ API
← กลับไปที่ React Academy