当前位置: 首页 > 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.lqws.cn/news/118513.html

相关文章:

  • 实时通信RTC与传统直播的异同
  • HashMap中的put方法执行流程(流程图)
  • 【免杀】C2免杀技术(十五)shellcode混淆uuid/ipv6/mac
  • 微软重磅发布Magentic UI,交互式AI Agent助手实测!
  • SQL 中 JOIN 的执行顺序优化指南
  • 神经网络-Day44
  • 根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
  • Python爬虫爬取天猫商品数据,详细教程【Python经典实战项目】
  • SpringAI(GA):Nacos2下的分布式MCP
  • 【25软考网工】第十章 网络规划与设计(1)综合布线
  • 基于Axure+墨刀设计的电梯管理系统云台ERP的中保真原型图
  • [Java 基础]注释
  • 生成式AI驱动的智能采集实战
  • NeRF PyTorch 源码解读 - NDC空间
  • Linux容器篇、第一章_01Linux系统下 Docker 安装与镜像部署全攻略
  • 回归分析-非线性回归及岭回归.docx
  • LabVIEW的MathScript Node 绘图功能
  • OpenCV C++ 学习笔记(六):绘制文本、几何绘图、查找/绘制轮廓
  • HRI-2025 | 大模型驱动的个性化可解释机器人人机交互研究
  • 中国区域30m/15天植被覆盖度数据集(2010-2022)
  • [论文阅读]PPT: Backdoor Attacks on Pre-trained Models via Poisoned Prompt Tuning
  • 隐藏层-机器学习
  • TongNCS 控制台没有显示验证码的解决方案(by sy+lqw)
  • 某校体育场馆结构自动化监测
  • Axios学习笔记
  • STM32实战:智能环境监测站设计方案
  • Cisco IOS XE WLC 任意文件上传漏洞复现(CVE-2025-20188)
  • 光学系统常用光学参数的测量
  • 如何有效删除 iPhone 上的所有内容?
  • 上门服务小程序订单系统框架设计