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

相关文章:

  • 海信IP810N-海思MV320芯片-安卓9-2+16G-免拆优盘卡刷固件包
  • 【Android】RV折叠适配器
  • 基于大模型的结节性甲状腺肿智能诊疗系统技术方案
  • NLP学习路线图(二十三):长短期记忆网络(LSTM)
  • constexpr 是 C++11 引入的关键字
  • PocketFlow 快速入门指南
  • 阿里内推-6月新出HC
  • App 上线后还能加固吗?iOS 应用的动态安全补强方案实战分享(含 Ipa Guard 等工具组合)
  • 数学复习笔记 26
  • 雷卯针对易百纳G610Q-IPC-38E 模组防雷防静电方案
  • 2025年大模型平台落地实践研究报告|附75页PDF文件下载
  • MySQL 索引底层原理剖析:B+ 树结构、索引创建维护与性能优化策略全解读
  • x86 汇编逻辑运算全解析:从【位操作】到实际应用(AND,OR,NOT,XOR,TEST)
  • 缓存控制HTTP标头设置为“无缓存、无存储、必须重新验证”
  • Cursor 工具项目构建指南: Web Vue-Element UI 环境下的 Prompt Rules 约束(new Vue 方式)
  • 杰发科技AC7801——使用内部晶振
  • 极客时间-《搞定音频技术》-学习笔记
  • 大数据学习(128)-数据分析实例
  • Linux开发工具(apt,vim,gcc)
  • Fluence推出“Pointless计划”:五种方式参与RWA算力资产新时代
  • ISO 17387——解读自动驾驶相关标准法规(LCDAS)
  • 网络寻路--图论
  • DeepSeek+SpringAI实现流式对话
  • 读文献先读图:GO弦图怎么看?
  • 概念全解析:结构化数据,半结构化数据,非结构化数据分别是什么意思?
  • 中国区域30m/15天植被覆盖度数据集(2010-2022)
  • 【PDF提取表格】如何提取发票内容文字并导出到Excel表格,并将发票用发票号改名,基于pdf电子发票的应用实现
  • 基于若依前后分离版-用户密码错误锁定
  • 第二章 2.3 数据存储安全风险之数据存储风险防范
  • 湖北理元理律师事务所:债务化解中的心理重建与法律护航