ประเภท MIME — คืออะไร, ประเภทไฟล์และการระบุใน iOS

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-07-11 เวลาอ่าน: 7 นาที

ประเภท MIME เป็นตัวระบุรูปแบบข้อมูลมาตรฐานที่ใช้ใน iOS เพื่อกำหนดประเภทไฟล์เมื่อส่งผ่านเครือข่าย ระบบไฟล์ และการสื่อสารระหว่างกระบวนการ ตาม เอกสารสำหรับนักพัฒนา Apple, 2024, ประเภท MIME (Multipurpose Internet Mail Extensions) จัดประเภทไฟล์ตามเนื้อหา: image/jpeg, application/pdf, text/plain iOS แปลง MIME เป็น UTI (Uniform Type Identifier) ผ่าน UTType สำหรับการจัดการไฟล์ของระบบ

ประเด็นสำคัญ

  • ประเภท MIME — ตัวระบุรูปแบบข้อมูลสองส่วน: ชนิด/ชนิดย่อย (image/png)
  • UTType — คู่หู iOS ของ MIME ใช้ภายในเพื่อระบุประเภทไฟล์
  • การแปลง ระหว่าง MIME และ UTI ทำผ่าน UTType.preferredMIMEType
  • การระบุ MIME ทำได้โดยนามสกุลไฟล์ เนื้อหา (magic bytes) หรือส่วนหัว HTTP
  • iOS Sandbox จำกัดการเข้าถึงไฟล์ประเภทที่ไม่รู้จัก — สิ่งสำคัญคือต้องลงทะเบียนประเภทที่กำหนดเองอย่างถูกต้อง

ประเภท MIME คืออะไร?

ประเภท MIME (Multipurpose Internet Mail Extensions) เป็นตัวระบุรูปแบบข้อมูลมาตรฐานที่ประกอบด้วยสองส่วน: ชนิดหลัก (type) และชนิดย่อย (subtype) คั่นด้วยเครื่องหมายทับ หมวดหมู่หลัก: text (ข้อความ), image (รูปภาพ), audio (เสียง), video (วิดีโอ), application (ข้อมูลไบนารี), multipart (ข้อความผสม)

มาตรฐาน MIME เดิมพัฒนาขึ้นสำหรับไฟล์แนบอีเมล (RFC 2046, 1996) แต่ปัจจุบันใช้ทุกที่: เซิร์ฟเวอร์ HTTP ระบุ Content-Type ของการตอบสนอง เบราว์เซอร์กำหนดวิธีจัดการไฟล์ และแอปพลิเคชันมือถือระบุว่าข้อมูลใดสามารถเปิดได้ IANA (Internet Assigned Numbers Authority) จัดทำทะเบียนประเภท MIME ที่ลงทะเบียนไว้

ตาม ทะเบียนประเภทสื่อ IANA (2024) มีประเภท MIME ทางการมากกว่า 1,800 ประเภทที่ลงทะเบียนไว้ และจำนวนจริงรวมถึงประเภทที่กำหนดเองและของผู้จำหน่ายเกิน 5,000 ประเภท iOS รองรับประเภทมาตรฐานส่วนใหญ่และมี API สำหรับทำงานกับประเภทเหล่านั้นผ่าน Uniform Type Identifiers

MIME และ UTI ใน iOS: ความแตกต่างและการแปลง

UTI (Uniform Type Identifier) เป็นระบบระบุชนิดเนื้อหาของ Apple ที่ใช้ภายใน iOS และ macOS ซึ่งแตกต่างจาก MIME ตรงที่ UTI รองรับลำดับชั้นการสืบทอด (เช่น public.image เป็นพาเรนต์ของ public.png และ public.jpeg) และไม่เพียงรวมรูปแบบไฟล์เท่านั้น แต่ยังรวมถึงชนิดข้อมูลนามธรรมด้วย

ประเภท MIMEUTIนามสกุลคำอธิบาย
image/jpegpublic.jpeg.jpg, .jpegรูปภาพ JPEG
application/pdfcom.adobe.pdf.pdfเอกสาร PDF
text/plainpublic.plain-text.txtไฟล์ข้อความ
application/jsonpublic.json.jsonข้อมูล JSON
video/mp4public.mpeg-4.mp4วิดีโอ MP4

การแปลง ระหว่าง MIME และ UTI ใน iOS ดำเนินการผ่านคลาส UTType (iOS 14+) ระบบจะรักษาฐานข้อมูลการจับคู่ภายในที่ครอบคลุมรูปแบบมาตรฐานส่วนใหญ่ สำหรับประเภทที่กำหนดเอง นักพัฒนาจะลงทะเบียนการจับคู่ใน Info.plist

swift
import UniformTypeIdentifiers

let mimeType = "image/jpeg"
if let uti = UTType(mimeType: mimeType) {
    print("UTI: \(uti.identifier)")
    print("สอดคล้องกับรูปภาพ: \(uti.conforms(to: .image))")
    print("นามสกุล: \(uti.preferredFilenameExtension ?? "")")
}

// การแปลงย้อนกลับ: UTI เป็น MIME
if let uti = UTType(filenameExtension: "pdf"),
   let mime = uti.preferredMIMEType {
    print("MIME สำหรับ PDF: \(mime)")
}

ลำดับชั้น UTI ช่วยให้ตรวจสอบว่าประเภทสอดคล้องกับหมวดหมู่ใดหมวดหมู่หนึ่งหรือไม่ ตัวอย่างเช่น รูปภาพทุกประเภท (JPEG, PNG, GIF) conform(to: .image) ซึ่งสะดวกสำหรับการกรองกลุ่มและการพิจารณาว่าประเภทสามารถจัดการโดยส่วนประกอบของระบบได้หรือไม่

ความแตกต่างสำคัญ: MIME เป็นการจำแนกแบบเรียบ (ไม่มีการสืบทอด) ในขณะที่ UTI รองรับการสืบทอดหลายรายการ ตัวอย่างเช่น public.html สอดคล้องกับทั้ง public.source-code และ public.text ซึ่งให้การกำหนดเส้นทางที่ยืดหยุ่นมากขึ้นเมื่อประมวลผลไฟล์ใน iOS

วิธีระบุประเภท MIME ของไฟล์ใน iOS

สามวิธีในการระบุประเภท MIME ใน iOS: โดยนามสกุลไฟล์ (รวดเร็วแต่ไม่น่าเชื่อถือ), โดยเนื้อหาผ่าน magic bytes (น่าเชื่อถือแต่ต้องอ่านไฟล์), และโดยส่วนหัว HTTP Content-Type (เฉพาะคำขอเครือข่าย)

swift
import UniformTypeIdentifiers

enum MIMEDetector {
    // ตรวจจับโดยนามสกุล
    static func fromExtension(_ ext: String) -> String? {
        UTType(filenameExtension: ext)?.preferredMIMEType
    }

    // ตรวจจับโดยเนื้อหา (magic bytes)
    static func fromFile(at url: URL) -> String? {
        guard let handle = try? FileHandle(forReadingFrom: url) else {
            return nil
        }
        defer { handle.closeFile() }
        let header = handle.readData(ofLength: 12)

        // PNG: 89 50 4E 47 0D 0A 1A 0A
        // JPEG: FF D8 FF
        // PDF: 25 50 44 46
        // ZIP: 50 4B 03 04

        if header.starts(with: [0x89, 0x50, 0x4E, 0x47]) {
            return "image/png"
        }
        if header.starts(with: [0xFF, 0xD8, 0xFF]) {
            return "image/jpeg"
        }
        if header.starts(with: [0x25, 0x50, 0x44, 0x46]) {
            return "application/pdf"
        }
        return nil
    }
}

การระบุโดยนามสกุล ผ่าน UTType เป็นวิธีที่เร็วที่สุด แต่ไม่น่าเชื่อถือหากนามสกุลหายไปหรือถูกปลอมแปลง ผู้โจมตีสามารถเปลี่ยนชื่อ .exe เป็น .jpg — ระบบจะระบุเป็น image/jpeg แม้ว่าไฟล์จะเป็นไฟล์ปฏิบัติการได้ สำหรับสถานการณ์สำคัญ (ความปลอดภัย ข้อมูลทางการแพทย์) ให้ใช้การตรวจสอบตามเนื้อหาเสมอ

Magic bytes คือไบต์แรกของไฟล์ ซึ่งไม่ซ้ำกันสำหรับแต่ละรูปแบบ รูปแบบส่วนใหญ่มีลายเซ็น 2–12 ไบต์ iOS ไม่มีตัวตรวจจับ MIME ในตัวตามเนื้อหา — นักพัฒนาจะต้อง implement ตารางลายเซ็นด้วยตนเอง หรือใช้ไลบรารีเช่น CocoaLumberjack หรือตัวตรวจจับแบบกำหนดเองตามฮิวริสติก

การลงทะเบียนประเภท MIME และ UTI ที่กำหนดเอง

ประเภทที่กำหนดเอง จำเป็นเมื่อแอปพลิเคชันทำงานกับรูปแบบข้อมูลที่เป็นกรรมสิทธิ์ซึ่งไม่ได้ลงทะเบียนกับ IANA หรือ Apple การลงทะเบียนใน Info.plist ช่วยให้ iOS จัดการไฟล์ดังกล่าวได้อย่างถูกต้อง: เปิดจาก Files.app, แสดงไอคอน และส่งต่อไปยังแอปพลิเคชันอื่นผ่าน UIActivityViewController

xml
<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeName</key>
        <string>MyApp Document</string>
        <key>LSHandlerRank</key>
        <string>Owner</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>com.myapp.secret-doc</string>
        </array>
    </dict>
</array>
<key>UTExportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeIdentifier</key>
        <string>com.myapp.secret-doc</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <array><string>sdoc</string></array>
            <key>public.mime-type</key>
            <array><string>application/vnd.myapp.secret-doc</string></array>
        </dict>
    </dict>
</array>

ในการลงทะเบียนประเภทที่กำหนดเอง คุณต้องระบุใน Info.plist: ตัวระบุ UTI (ในรูปแบบ reverse-DNS), ความสอดคล้องกับประเภทพาเรนต์, นามสกุลไฟล์ และประเภท MIME iOS ใช้ข้อมูลนี้สำหรับการกำหนดเส้นทางไฟล์: เมื่อผู้ใช้เปิดไฟล์ .sdc ระบบจะรู้ว่าเจ้าของคือแอปพลิเคชันของคุณ

UTExportedTypeDeclarations — สำหรับประเภทที่กำหนดโดยแอปพลิเคชันของคุณ (ส่งออก) UTImportedTypeDeclarations — สำหรับประเภทที่สร้างโดยแอปพลิเคชันอื่นที่แอปของคุณสามารถทำงานด้วย (นำเข้า) Apple แนะนำให้ลงทะเบียนประเภทที่กำหนดเองทั้งหมดที่แอปพลิเคชันของคุณทำงานด้วยเพื่อการรวมระบบที่ถูกต้อง

ความปลอดภัยและการจัดการประเภทที่ไม่รู้จัก

ประเภท MIME ที่ไม่รู้จัก ก่อให้เกิดความเสี่ยงด้านความปลอดภัยสำหรับแอปพลิเคชัน iOS หากไฟล์มีประเภทที่ไม่รู้จักหรือไม่ได้รับการยืนยัน แอปพลิเคชันควรใช้ความระมัดระวัง: อย่าเปิดไฟล์โดยอัตโนมัติ แสดงคำเตือนแก่ผู้ใช้ หรือวิเคราะห์เนื้อหาก่อนการประมวลผล

ภัยคุกคามหลัก: ไฟล์ที่มีประเภท MIME ปลอมอาจมีโค้ดที่เป็นอันตรายหรือการโจมตีช่องโหว่ของตัวแยกวิเคราะห์ iOS ปกป้องระบบผ่าน Sandbox แต่แอปพลิเคชันอาจเสี่ยงหากเชื่อถือประเภท MIME โดยไม่ตรวจสอบเนื้อหา ตรวจสอบไฟล์ด้วย magic bytes เสมอหากมาจากแหล่งที่ไม่น่าเชื่อถือ

ตาม คู่มือความปลอดภัยมือถือ OWASP, 2024 แนวทางปฏิบัติต่อไปนี้ใช้สำหรับการจัดการไฟล์ประเภทที่ไม่รู้จัก: ปฏิเสธไฟล์ที่มีประเภท MIME application/octet-stream จากแหล่งที่ไม่น่าเชื่อถือ; ใช้ UTType เพื่อตรวจสอบความสอดคล้องกับหมวดหมู่ที่คาดหวัง; อย่าเปิดไฟล์ในแอปพลิเคชันภายนอกโดยไม่ได้รับการยืนยันจากผู้ใช้; บันทึกทุกกรณีของความไม่ตรงกันระหว่าง MIME และเนื้อหาจริงสำหรับการตรวจสอบความปลอดภัย

การลงทะเบียนประเภท MIME ที่กำหนดเอง ใน Info.plist ไม่เพียงแต่เกี่ยวกับฟังก์ชันการทำงาน แต่ยังรวมถึงความปลอดภัยด้วย หากแอปพลิเคชันลงทะเบียนเฉพาะประเภทของตนเองอย่างถูกต้อง ระบบจะไม่ส่งไฟล์อื่นไปยังแอปพลิเคชันโดยผิดพลาด ใช้คำนำหน้าผู้จำหน่ายเฉพาะ (application/vnd.company.app-format) แทนคำนำหน้าทั่วไป (application/x-format) เพื่อหลีกเลี่ยงความขัดแย้งกับแอปพลิเคชันอื่น

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

ประเภท MIME คืออะไร?

ประเภท MIME เป็นตัวระบุรูปแบบข้อมูลมาตรฐานที่ประกอบด้วยชนิดและชนิดย่อย (เช่น image/jpeg) ใช้โดยเซิร์ฟเวอร์ HTTP เบราว์เซอร์และแอปพลิเคชันเพื่อกำหนดวิธีจัดการไฟล์

UTI แตกต่างจาก MIME ใน iOS อย่างไร?

UTI (Uniform Type Identifier) เป็นระบบของ Apple สำหรับระบุชนิดเนื้อหาที่รองรับลำดับชั้นการสืบทอด MIME เป็นมาตรฐานแบบเรียบสำหรับเครือข่าย iOS ใช้ UTType สำหรับการแปลงระหว่าง UTI และ MIME ผ่านคุณสมบัติ preferredMIMEType

วิธีระบุประเภท MIME ของไฟล์ใน iOS?

สามวิธี: โดยนามสกุล ผ่าน UTType(filenameExtension:), โดยเนื้อหา ผ่าน magic bytes (ไบต์แรกของไฟล์), โดยส่วนหัว HTTP Content-Type เพื่อความปลอดภัย ให้ใช้การตรวจสอบตามเนื้อหามากกว่าเพียงแค่นามสกุล

วิธีลงทะเบียนประเภท MIME ที่กำหนดเองใน iOS?

เพิ่ม UTExportedTypeDeclarations ใน Info.plist: ระบุตัวระบุ UTI (com.company.format), นามสกุลไฟล์, ประเภท MIME และประเภทพาเรนต์ ไฟล์ที่มีนามสกุลนี้จะเชื่อมโยงกับแอปพลิเคชันของคุณโดยอัตโนมัติ

จะทำอย่างไรกับประเภท MIME ที่ไม่รู้จัก?

อย่าเชื่อถือ MIME ที่ไม่รู้จัก ตรวจสอบเนื้อหาด้วย magic bytes แสดงคำเตือนแก่ผู้ใช้ และอย่าเปิดไฟล์โดยอัตโนมัติ สำหรับไฟล์ประเภท application/octet-stream ให้วิเคราะห์ฮิวริสติกก่อนการประมวลผลเสมอ

สรุป

  • ประเภท MIME — ตัวระบุรูปแบบข้อมูลมาตรฐาน (ชนิด/ชนิดย่อย) ที่ใช้ใน HTTP และ iOS
  • UTType — API iOS สำหรับทำงานกับชนิดเนื้อหา รองรับลำดับชั้นและการแปลง MIME→UTI
  • การระบุประเภท ทำโดยนามสกุล magic bytes หรือส่วนหัว HTTP Content-Type
  • ประเภทที่กำหนดเอง ลงทะเบียนใน Info.plist ผ่าน UTExportedTypeDeclarations
  • ความปลอดภัย ต้องการการตรวจสอบเนื้อหา — MIME จากส่วนหัวอาจถูกปลอมแปลง
  • ลำดับชั้น UTI ช่วยให้ตรวจสอบหมวดหมู่ไฟล์ (รูปภาพ ข้อความ วิดีโอ) ผ่าน conforms(to:)
  • Application/octet-stream — ประเภทสากลสำหรับข้อมูลไบนารีที่ไม่รู้จัก ต้องการการวิเคราะห์ฮิวริสติก

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม