Skip to content

getAssetIconNameByExtension ​

根据文件后缀(或文件名)获取对应的 iconfont 图标名,内部通过「后缀 → MIME → iconfont」两级映射完成解析。

文件信息

解析结果

iconfont 名称
common--nav--file-line
完整 class(默认前缀 icon-)
.icon-common--nav--file-line

在 Vue UI 中可以配合 <CwIcon :name="iconfontName" prefix="icon" /> 使用。

函数签名 ​

typescript
interface GetAssetIconNameByExtensionOptions {
  /** 找不到匹配时的默认图标名(不带前缀),默认 'common--nav--more-apps-line' */
  defaultIcon?: string
}

/** 根据 MIME 获取 iconfont 图标名 */
function getAssetIconNameByMime(
  mime: string | undefined | null,
  options?: GetAssetIconNameByExtensionOptions
): string

/** 根据文件名或后缀获取 iconfont 图标名 */
function getAssetIconNameByExtension(
  filenameOrExtension: string,
  options?: GetAssetIconNameByExtensionOptions
): string

参数 ​

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

返回值 ​

类型说明
stringiconfont 图标名(不带前缀,与 @zengchaowu/vue-ui 项目 iconfont 同步;常见为 common--media--image-line / common--nav--file-line / common--nav--more-apps-line 等)

工作原理 ​

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

常见映射 ​

文档 / 压缩包 / 音视频 / 等 ​

说明图标名
PDF、Office、纯文本/代码、压缩包、音视频、部分设计稿格式等common--nav--file-line

(具体以 mimeToIconfontMap 与启发式规则为准。)

图片 ​

说明图标名
常见位图/矢量图后缀(png / jpg / gif / svg 等)common--media--image-line

兜底 ​

  • 未知类型或未配置类型 → common--nav--more-apps-line(可通过 defaultIcon 修改)

使用示例 ​

typescript
import { getAssetIconNameByExtension } from '@zengchaowu/shared/functions/file/getAssetIconNameByExtension'

// 文档
getAssetIconNameByExtension('report.pdf')       // 'common--nav--file-line'
getAssetIconNameByExtension('data.xlsx')        // 'common--nav--file-line'

// 图片
getAssetIconNameByExtension('photo.png')        // 'common--media--image-line'
getAssetIconNameByExtension('logo.svg')         // 'common--media--image-line'

// 音视频
getAssetIconNameByExtension('music.mp3')        // 'common--nav--file-line'
getAssetIconNameByExtension('movie.mp4')         // 'common--nav--file-line'

// 设计文件
getAssetIconNameByExtension('design.psd')       // 'common--nav--file-line'
getAssetIconNameByExtension('banner.ai')        // 'common--nav--file-line'

// 直接传入后缀
getAssetIconNameByExtension('pdf')              // 'common--nav--file-line'
getAssetIconNameByExtension('.zip')             // 'common--nav--file-line'

// 自定义兜底图标
getAssetIconNameByExtension('unknown.xyz', {
  defaultIcon: 'common--nav--more-apps-line'
}) // 'common--nav--more-apps-line'