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

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

// 配置化文件类型检测(集中管理支持的类型)
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.lryc.cn/news/2404462.html

相关文章:

  • Qwen大语言模型里,<CLS>属于特殊的标记:Classification Token
  • TDengine 开发指南——无模式写入
  • 分布式互斥算法
  • 第34次CCF-CSP认证真题解析(目标300分做法)
  • video-audio-extractor:视频转换为音频
  • rk3588 区分两个相同的usb相机
  • [概率论基本概念4]什么是无偏估计
  • 乐观锁与悲观锁的实现和应用
  • PL/SQLDeveloper中数值类型字段查询后显示为科学计数法的处理方式
  • 【vue】Uniapp 打包Android 文件选择上传问题详解~
  • ASR技术(自动语音识别)深度解析
  • 图论水题2
  • Ctrl-Crash 助力交通安全:可控生成逼真车祸视频,防患于未然
  • 网络编程之服务器模型与UDP编程
  • Transformer-BiLSTM、Transformer、CNN-BiLSTM、BiLSTM、CNN五模型时序预测
  • 阿里云服务器安装nginx并配置前端资源路径(前后端部署到一台服务器并成功访问)
  • Ubuntu 下开机自动执行命令的方法
  • C++11新增重要标准(下)
  • 【第六篇】 SpringBoot的日志基础操作
  • Pluto论文阅读笔记
  • ubuntu显示器未知
  • Faiss向量数据库全面解析:从原理到实战
  • matlab 2024a ​工具箱Aerospsce Toolbox报错​
  • 使用有限计算实现视频生成模型的高效训练
  • Server2003 B-1 Windows操作系统渗透
  • 一次Oracle的非正常关闭
  • AI不会杀死创作,但会杀死平庸
  • JeecgBoot低代码管理平台
  • Fetch与Axios:区别、联系、优缺点及使用差异
  • YOLO11解决方案之分析