跳到内容

开发者文件格式快速参考

分类:参考

在网络应用开发中,文件验证、MIME 类型判定和上传限制设计等都频繁需要文件格式知识。本文汇总了开发现场常见的文件格式列表。收藏此页面,即可随时查阅作为快速参考指南。

主要文件格式使用矩阵 按类别的文件格式和主要用途 图像 JPEG / JPG PNG (透明) WebP (Web 推荐) AVIF (新一代) SVG (矢量) GIF (旧式动画) 文档 PDF (分发) DOCX (Word) XLSX (Excel) PPTX (PowerPoint) ODT (OpenDoc) RTF (兼容) 压缩包 ZIP (标准) TAR.GZ (Unix) 7Z (高压缩) RAR (付费) XZ (LZMA) BZIP2 (旧式) 文本/数据 JSON (API) CSV (表格) XML (结构) YAML (配置) TOML (配置) TXT (纯文本)
图1: 4 类主要文件格式

图像格式

文件扩展名 MIME 类型 压缩 透明度 主要用途
.png image/png 无损 支持 截图、徽标、图标
.jpg / .jpeg image/jpeg 有损 不支持 照片、缩略图
.gif image/gif 无损 支持 (1bit) 动画、简单图形
.webp image/webp 两者 支持 网络通用(PNG 后继候选)
.avif image/avif 两者 支持 下一代网络图像
.svg image/svg+xml 无 (XML) 支持 矢量图像、图标

注意:SVG 基于 XML,存在 XSS(跨站脚本)风险。直接显示用户上传的 SVG 是危险的。必须进行清理处理。

文档格式

文件扩展名 MIME 类型 内部结构 主要用途
.pdf application/pdf 二进制 打印用文档、表格
.docx application/vnd.openxmlformats-officedocument.wordprocessingml.document ZIP(XML) Word 文档
.xlsx application/vnd.openxmlformats-officedocument.spreadsheetml.sheet ZIP(XML) Excel 电子表格
.pptx application/vnd.openxmlformats-officedocument.presentationml.presentation ZIP(XML) PowerPoint 演示文稿

存档格式

文件扩展名 MIME 类型 特点 注意事项
.zip application/zip 最广泛的发行版、操作系统标准支持 日本语文件名乱码(UTF-8 vs CP932)
.tar.gz application/gzip Unix/Linux 标准 Windows 上可能需要解压工具
.7z application/x-7z-compressed 高压缩比 需要专用工具 (7-Zip)
.rar application/vnd.rar 支持分割归档 专有格式

文本和数据格式

文件扩展名 MIME 类型 用途 常见问题
.csv text/csv 数据交换、导入/导出 字符编码、换行码和 BOM
.json application/json API 通信、配置文件 UTF-8 必需(RFC 8259)
.xml application/xml 配置文件和数据交换 与编码声明不匹配
.txt text/plain 日志、备注、README 字符编码的自动检测不稳定

MIME 类型验证

在实现文件上传功能时,验证 MIME 类型和文件扩展名都很重要。但是,MIME 类型可以在客户端伪造,因此也应该在服务器端使用魔术字节(文件头)检查。

// PHP でのマジックバイトによる判定
$finfo = new finfo(FILEINFO_MIME_TYPE);
$mimeType = $finfo->file($_FILES['upload']['tmp_name']);

$allowedTypes = [
    'image/png',
    'image/jpeg',
    'image/webp',
    'application/pdf',
];

if (!in_array($mimeType, $allowedTypes, true)) {
    throw new Exception('許可されていないファイル形式です');
}
// Node.js での file-type ライブラリを使った判定
import { fileTypeFromFile } from 'file-type';

const type = await fileTypeFromFile('upload.png');
console.log(type);
// { ext: 'png', mime: 'image/png' }

下载测试文件

对于各种格式的验证处理和上传功能测试,请使用 DevLab 的测试文件。

总结

对文件格式的正确理解是实现安全、稳健的上传功能的基础。应该使用MIME类型和魔数字节进行验证,而不仅仅是文件扩展名,以执行适当的验证。建议将此参考资料加入书签,以便在开发时随时查阅。

❓ 常见问题

文件上传为什么需要校验 MIME 类型?
扩展名极易伪造,仅检查扩展名并不安全。应在服务端使用 finfo 或 mime_content_type() 校验 MIME 类型,并结合文件头的魔术字节检查,才能有效阻止恶意文件上传。
允许上传 SVG 文件时需要注意什么?
SVG 基于 XML,存在 XSS 风险。切勿直接展示用户上传的 SVG,必须先做净化处理,移除 script 标签、事件处理器等可执行内容。
Office 文档(docx、xlsx、pptx)的内部结构是怎样的?
docx、xlsx、pptx 实为内含 XML 文件的 ZIP 压缩包。其 MIME 类型是较长的 application/vnd.openxmlformats-officedocument 系列字符串,白名单中必须写入这些精确值。