当前位置: 首页 > news >正文

正则表达式检测文件类型是否为视频或图片

// 配置化文件类型检测(集中管理支持的类型)
const FILE_TYPE_CONFIG = {video: {extensions: ['mp4', 'webm', 'ogg', 'quicktime'], // 可扩展支持更多格式regex: /^video\/(mp4|webm|ogg|quicktime)$/i // 自动生成正则},image: {extensions: ['jpeg', 'jpg', 'png', 'webp', 'gif', 'svg+xml'], // 包含SVG支持regex: /^image\/(jpeg|jpg|png|webp|gif|svg\+xml)$/i}
};function detectFileType(type: string): {isVideo: boolean;isImage: boolean;extension: string | null;
} {// 统一处理MIME类型const normalizedType = type.toLowerCase();// 视频检测const isVideo = FILE_TYPE_CONFIG.video.regex.test(normalizedType);// 图片检测const isImage = FILE_TYPE_CONFIG.image.regex.test(normalizedType);// 提取扩展名(可选功能)const extension = FILE_TYPE_CONFIG.image.extensions.find(ext => normalizedType.includes(ext)) || FILE_TYPE_CONFIG.video.extensions.find(ext => normalizedType.includes(ext)) || null;return { isVideo, isImage, extension };
}// 使用示例
const { type } = file;
const { isVideo, isImage } = detectFileType(type);

添加文件大小限制

function validateFileSize(file: File, maxSizeMB: number): boolean {return file.size <= maxSizeMB * 1024 * 1024;
}

添加白名单域名验证(防止恶意文件)

//添加白名单域名验证(防止恶意文件)
function validateFileOrigin(url: string, allowedDomains: string[]): boolean {try {const { hostname } = new URL(url);return allowedDomains.includes(hostname);} catch {return false;}
}

 使用示例

const { type, size} = file;// 基础检测
const { isVideo, isImage } = detectFileType(type);// 高级验证
const isSafe = validateFileOrigin(url, ['cdn.example.com']);
const isSizeValid = validateFileSize(file, 10); // 10MB限制// 完整检测流程
if (isImage && isSafe && isSizeValid) {// 处理图片文件
} else if (isVideo) {// 处理视频文件
}

http://www.dtcms.com/a/230415.html

相关文章:

  • Linux-文件管理及归档压缩
  • Go语言爬虫系列教程4:使用正则表达式解析HTML内容
  • OPENCV的AT函数
  • 25_05_29docker
  • Windows系统工具:WinToolsPlus 之 SQL Server 日志清理
  • 数据库表中「不是 null」的含义
  • ArcGIS计算多个栅格数据的平均栅格
  • IEC 61347-1:2015 灯控制装置安全标准详解
  • 打卡第36天:模型可视化以及推理
  • React Native开发鸿蒙运动健康类应用的项目实践记录
  • 破解HTTP无状态:基于Java的Session与Cookie协同工作指南
  • 一个完整的时间序列异常检测系统,使用Flask作为后端框架,实现了AE(自编码器)、TimesNet和LSTM三种模型,并提供可视化展示
  • 八:操作系统设备管理之I/O 软件层次结构
  • 微软的新系统Windows12未来有哪些新特性
  • Redis-旁路缓存策略详解
  • Web3时代的数据保护挑战与应对策略
  • 如何流畅播放体育电竞赛事?
  • Java高效批量读取Redis数据:原理、方案与实战案例
  • Leetcode 3088. 使字符串反回文
  • AI智能体,为美业后端供应链注入“智慧因子”(4/6)
  • 六种高阶微分方程的特解(原创:daode3056)
  • win32com.client模块 —— Python实现COM自动化控制与数据交互
  • MySQL 事务的 ACID 四大特性及其实现原理
  • 国产三维CAD皇冠CAD在「金属压力容器制造」建模教程:蒸汽锅炉
  • 充电桩项目开发问题记录
  • 【Golang笔记04】Go语言中文件操作的学习笔记
  • 卓健易控ZJ-LIMS 实验室管理系统:为医院建设注入强大动力​
  • Vue + Element Plus 实战:大文件切片上传 + 断点续传
  • 网络各类型(BMA,NBMA,P2P)
  • 机器学习的数学基础:假设检验