getIconfontNameByExtension
根据文件后缀(或文件名)获取对应的 iconfont 图标名,内部通过「后缀 → MIME → iconfont」两级映射完成解析。
文件信息
解析结果
iconfont 名称
wenjian完整 class(默认前缀 icon-)
.icon-wenjian 在 Vue UI 中可以配合 <CwIcon :name="iconfontName" prefix="icon" /> 使用。
函数签名
typescript
interface GetIconfontNameByExtensionOptions {
/** 找不到匹配时的默认图标名(不带前缀),默认 'others' */
defaultIcon?: string
}
/** 根据 MIME 获取 iconfont 图标名 */
function getIconfontNameByMime(
mime: string | undefined | null,
options?: GetIconfontNameByExtensionOptions
): string
/** 根据文件名或后缀获取 iconfont 图标名 */
function getIconfontNameByExtension(
filenameOrExtension: string,
options?: GetIconfontNameByExtensionOptions
): string参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
filenameOrExtension | string | 是 | 文件名(如 report.pdf)或后缀(如 pdf / .pdf) |
options | GetIconfontNameByExtensionOptions | 否 | 配置项,支持自定义默认图标 |
返回值
| 类型 | 说明 |
|---|---|
string | iconfont 图标名(不带前缀,与 @zcw/vue-ui 项目 iconfont 同步;常见为 image / wenjian / others 等) |
工作原理
- 解析
filenameOrExtension,优先按完整文件名提取扩展名,失败时再将输入视为纯后缀并去掉前导点。 - 使用内部的
extensionToMimeMap将扩展名映射为标准 MIME 类型(如pdf → application/pdf)。 - 使用
mimeToIconfontMap将 MIME 映射为具体的 iconfont 图标名(如application/pdf → 'wenjian')。 - 对未显式配置的 MIME,按大类进行兜底映射(如
image/* → 'image',其馀常见文件类型为wenjian)。 - 如果仍然无法匹配,则返回
options.defaultIcon,默认值为'others'。
常见映射
文档 / 压缩包 / 音视频 / 等
| 说明 | 图标名 |
|---|---|
| PDF、Office、纯文本/代码、压缩包、音视频、部分设计稿格式等 | wenjian |
(具体以 mimeToIconfontMap 与启发式规则为准。)
图片
| 说明 | 图标名 |
|---|---|
常见位图/矢量图后缀(png / jpg / gif / svg 等) | image |
兜底
- 未知类型或未配置类型 →
others(可通过defaultIcon修改)
使用示例
typescript
import { getIconfontNameByExtension } from 'zcw-shared/functions/file/getIconfontNameByExtension'
// 文档
getIconfontNameByExtension('report.pdf') // 'wenjian'
getIconfontNameByExtension('data.xlsx') // 'wenjian'
// 图片
getIconfontNameByExtension('photo.png') // 'image'
getIconfontNameByExtension('logo.svg') // 'image'
// 音视频
getIconfontNameByExtension('music.mp3') // 'wenjian'
getIconfontNameByExtension('movie.mp4') // 'wenjian'
// 设计文件
getIconfontNameByExtension('design.psd') // 'wenjian'
getIconfontNameByExtension('banner.ai') // 'wenjian'
// 直接传入后缀
getIconfontNameByExtension('pdf') // 'wenjian'
getIconfontNameByExtension('.zip') // 'wenjian'
// 自定义兜底图标
getIconfontNameByExtension('unknown.xyz', {
defaultIcon: 'others'
}) // 'others'