FileAcceptPattern
大约 2 分钟
FileAcceptPattern
是一个用于解析并匹配文件类型规则的工具类,支持以下几种匹配方式:
- 任意类型(通配符
*
) - 文件后缀名(如
.jpg
,.txt
) - MIME 类型(如
image/jpeg
,text/plain
) - MIME 类型前缀(如
image/*
,application/*
)
该类适用于文件上传、文件选择等场景中,用于校验文件是否符合指定的类型限制。
构造函数
初始化一个 FileAcceptPattern
实例,根据传入的文件类型规则数组进行解析。
参数说明
参数名 | 类型 | 说明 |
---|---|---|
accepts | string[] | 接受的文件类型规则数组 |
规则格式说明
规则格式 | 示例 | 说明 |
---|---|---|
通配符 | * | 接受任意类型 |
后缀名 | .jpg | 匹配后缀名为 jpg 的文件 |
MIME 类型 | image/jpeg | 匹配特定 MIME 类型 |
MIME 前缀 | image/* | 匹配以 image/ 开头的类型 |
示例
const pattern = new FileAcceptPattern(['.jpg', 'image/*', 'text/plain']);
方法说明
matches
判断给定的文件是否符合当前的匹配规则。
参数说明
参数名 | 类型 | 说明 |
---|---|---|
contentType | string | 文件的 MIME 类型 |
suffixName | string | 文件的后缀名(不带点号) |
返回值说明
- 类型:
boolean
- 说明:
true
:文件符合当前规则false
:文件不符合规则
示例
const pattern = new FileAcceptPattern(['.jpg', 'image/*']);
const result1 = pattern.matches('image/jpeg', 'jpg'); // true
const result2 = pattern.matches('text/plain', 'txt'); // false
内部字段说明
字段名 | 类型 | 说明 |
---|---|---|
anyPattern | boolean | 是否接受任意类型(当规则为 * 时为 true) |
suffixNames | Set<string> | 存储所有允许的后缀名 |
checkSuffixName | boolean | 是否启用后缀名匹配 |
mimePrefixes | string[] | 存储所有允许的 MIME 类型前缀 |
checkMimePrefix | boolean | 是否启用 MIME 类型前缀匹配 |
mimes | Set<string> | 存储所有允许的完整 MIME 类型 |
checkMime | boolean | 是否启用完整 MIME 类型匹配 |
使用场景
1. 文件上传限制
const allowedTypes = new FileAcceptPattern(['.png', '.jpg', 'image/*']);
const file = event.target.files[0];
if (allowedTypes.matches(file.type, getFileSuffixName(file.name))) {
// 允许上传
} else {
// 提示格式不支持
}
2. 文件选择器限制
在 <input type="file" accept="..." />
中传入的 accept
属性值可由该类解析并进行进一步逻辑处理。
注意事项
- 后缀名匹配不区分大小写。
- MIME 类型匹配时统一转为小写处理。
- 如果传入空数组或未定义的
accepts
,构造函数会抛出错误。 - 支持多种规则混合使用,匹配逻辑为“或”关系,即满足任意一项即为匹配。
总结
[FileAcceptPattern](file://d:\work\CODE_Develop\Web_Framework\ui\simperfect-utils\src\file\file-accept-pattern.ts#L8-L97) 是一个功能强大、灵活的文件类型匹配工具类,能够解析多种格式的文件类型规则,并提供统一的匹配接口,适用于前端文件上传、文件选择等场景。开发者可将其集成到表单校验、上传控件等模块中,提升代码复用性和可维护性。