Skip to content

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

参数

参数名类型必填说明
filenameOrExtensionstring文件名(如 report.pdf)或后缀(如 pdf / .pdf
optionsGetIconfontNameByExtensionOptions配置项,支持自定义默认图标

返回值

类型说明
stringiconfont 图标名(不带前缀,与 @zcw/vue-ui 项目 iconfont 同步;常见为 image / wenjian / others 等)

工作原理

  1. 解析 filenameOrExtension,优先按完整文件名提取扩展名,失败时再将输入视为纯后缀并去掉前导点。
  2. 使用内部的 extensionToMimeMap 将扩展名映射为标准 MIME 类型(如 pdf → application/pdf)。
  3. 使用 mimeToIconfontMap 将 MIME 映射为具体的 iconfont 图标名(如 application/pdf → 'wenjian')。
  4. 对未显式配置的 MIME,按大类进行兜底映射(如 image/* → 'image',其馀常见文件类型为 wenjian)。
  5. 如果仍然无法匹配,则返回 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'