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

在日常的文件处理中,我们经常需要根据文件的后缀名来判断文件的类型,以便进行相应的处理。本文将介绍一个实用的 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())
相关推荐
Zoey的笔记本1 分钟前
「软件开发缺陷管理工具」的闭环追踪设计与自动化集成架构
java·服务器·前端
Sapphire~5 分钟前
【前端基础】04-XSS(跨站脚本攻击,Cross-Site Scripting)
前端·xss
奔跑的web.6 分钟前
Vue 3.6 重磅新特性:Vapor Mode 深度解析
前端·javascript·vue.js
MediaTea7 分钟前
Python OOP 设计思想 13:封装服务于演化
linux·服务器·前端·数据库·python
爱敲代码的婷婷婷.8 分钟前
patch-package 修改 node_modules流程以及注意点
前端·react native·前端框架·node.js
这是个栗子12 分钟前
【API封装参数传递】params 与 API 封装
开发语言·前端·javascript·data·params
凌栀茗20 分钟前
html第二天
前端·javascript·html
你脸上有BUG20 分钟前
CSS实现透明内层+渐变边框的优雅方案
前端·css·毛玻璃
Amumu1213829 分钟前
Redux介绍(一)
前端·javascript·react.js
麷飞花32 分钟前
TypeScript问题
前端·javascript·vscode·typescript·ts