前端根据文件后缀名智能识别文件类型的实用函数

在日常的文件处理中,我们经常需要根据文件的后缀名来判断文件的类型,以便进行相应的处理。本文将介绍一个实用的 TypeScript 函数,它能够根据文件后缀名智能识别文件类型。

函数功能概述

matchFileType 函数接收一个文件名作为参数,通过提取文件后缀名并与预定义的文件类型进行匹配,返回对应的文件类型标识。如果无法匹配任何已知类型,则返回 'other';如果没有后缀名,则返回 false

TypeScript 复制代码
/**
 * 根据文件名后缀区分文件类型
 *
 * @param fileName - 文件名称
 * @returns 数据返回:
 *  1) 无后缀匹配 - false
 *  2) 匹配图片 - image
 *  3) 匹配 txt - txt
 *  4) 匹配 csv - csv
 *  5) 匹配 excel - excel
 *  6) 匹配 word - word
 *  7) 匹配 pdf - pdf
 *  8) 匹配 ppt - ppt
 *  9) 匹配视频 - video
 *  10) 匹配音频 - radio
 *  11) 其他匹配项 - other
 */
export function matchFileType(fileName: any) {
  // 后缀获取
  let suffix = '';
  // 获取类型结果
  let result = false;
  if (!fileName) return false;
  try {
    // 截取文件后缀
    suffix = fileName.substr(fileName.lastIndexOf('.') + 1, fileName.length);
    // 文件后缀转小写,方便匹配
    suffix = suffix.toLowerCase();
  } catch {
    suffix = '';
  }
  // fileName无后缀返回 false
  if (!suffix) {
    result = false;
    return result;
  }

  const fileTypeList = [
    // 图片类型
    { typeName: 'image', types: ['png', 'jpg', 'jpeg', 'bmp', 'gif'] },
    // 文本类型
    { typeName: 'txt', types: ['txt'] },
    // csv文本类型
    { typeName: 'csv', types: ['csv'] },
    // excel类型
    { typeName: 'excel', types: ['xls', 'xlsx'] },
    { typeName: 'word', types: ['doc', 'docx'] },
    { typeName: 'pdf', types: ['pdf'] },
    { typeName: 'ppt', types: ['ppt'] },
    // 视频类型
    { typeName: 'video', types: ['mp4', 'm2v', 'mkv'] },
    // 音频
    { typeName: 'radio', types: ['mp3', 'wav', 'wmv'] },
  ];
  
  for (const fileTypeItem of fileTypeList) {
    const typeName = fileTypeItem.typeName;
    const types = fileTypeItem.types;
    result = types.includes(suffix);
    if (result) {
      return typeName;
    }
  }
  return 'other';
}

返回值说明

函数返回以下值之一:

  • false:文件名无效或无后缀名

  • 'image':图片文件(png、jpg、jpeg、bmp、gif)

  • 'txt':文本文件(txt)

  • 'csv':CSV文件(csv)

  • 'excel':Excel文件(xls、xlsx)

  • 'word':Word文档(doc、docx)

  • 'pdf':PDF文档(pdf)

  • 'ppt':PPT文档(ppt)

  • 'video':视频文件(mp4、m2v、mkv)

  • 'radio':音频文件(mp3、wav、wmv)

  • 'other':其他未明确分类的文件类型

使用

path 为各种在线文件链接,尤其是对接上传文件组件返回的链接等

TypeScript 复制代码
 matchFileType(path?.split('?').shift())
相关推荐
听风说图1 天前
Figma画布协议揭秘:组件实例的SymbolOverrides覆盖机制
前端·canvas
小杨前端1 天前
前端如何自己实现一个webpack的热更新?
前端
@大迁世界1 天前
02.CSS变量 (Variables)
前端·css
鹏多多1 天前
轻量+响应式!React瀑布流插件react-masonry-css的详细教程和案例
前端·javascript·react.js
用户345848285051 天前
java中的tomicInteger/AtomicLong介绍
前端·后端
一颗宁檬不酸1 天前
Vue.js 初学者基础知识点总结 第一弹
前端·javascript·vue.js
xiaoxue..1 天前
解析 LocalStorage与事件委托在前端数据持久化中的应用
前端·javascript·面试
Mintopia1 天前
「无界」全局浮窗组件设计与父子组件最佳实践
前端·前端框架·前端工程化
@cc小鱼仔仔1 天前
vue 知识点
前端·javascript·vue.js
特级业务专家1 天前
《终章:从 Vite 专用到全构建工具生态 - 我的字体插件如何征服 Webpack、Rollup 全栈》
前端·javascript·vue.js