正則表達式檢測文件類型是否為視頻或圖片

// 配置化文件類型檢測(集中管理支持的類型)
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.pswp.cn/diannao/85771.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/85771.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/85771.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis最佳實踐——熱點數據緩存詳解

Redis在電商熱點數據緩存中的最佳實踐 一、熱點數據定義與識別 1. 熱點數據特征 高頻訪問&#xff08;QPS > 1000&#xff09;數據規模適中&#xff08;單條 < 10KB&#xff09;數據變化頻率低&#xff08;更新間隔 > 5分鐘&#xff09;業務關鍵性高&#xff08;直接…

8088單板機C語言sprintf()格式化串口輸出---Prj04

#include "tiny_stdarg.h" // 使用自定義可變參數實現#define ADR_273 0x0200 #define ADR_244 0x0400 #define LED_PORT 0x800 #define PC16550_THR 0x1f0 #define PC16550_LSR 0x1f5 / //基本的IO操作函數 / char str[]"Hello World! 20250531 Ve…

【面試】音視頻面試

H.264 與 H.265 有什么區別&#xff1f; 1&#xff09;主要區別 H.265 也稱為高效視頻編碼 (HEVC)&#xff0c;是 H.264 的升級和更高級的版本&#xff1b;H.265 的編碼架構大致上 和 H.264 的架構相似&#xff0c;主要也包含&#xff1a;幀內預測&#xff08;intra predicti…

Windows系統下npm報錯node-gyp configure got “gyp ERR“解決方法

感謝原博主&#xff0c;此文參考網址&#xff1a;https://zhuanlan.zhihu.com/p/398279220 確保已經安裝node.js &#xff08;官方網址&#xff1a;https://nodejs.org/zh-cn/download&#xff09; 首先在命令窗口執行命令安裝windows-build-tools&#xff1a; npm install -…

git stash命令用法

git stash 是 Git 中一個非常有用的命令&#xff0c;它可以臨時保存當前工作區的修改&#xff0c;讓你可以切換到其他分支或者處理其他任務&#xff0c;而不需要提交這些還未完成的修改。 一、基本用法 1. 保存當前修改&#xff08;包括暫存區和工作區的內容&#xff09; git…

【C語言練習】080. 使用C語言實現簡單的數據庫操作

080. 使用C語言實現簡單的數據庫操作 080. 使用C語言實現簡單的數據庫操作使用原生APIODBC接口第三方庫ORM框架文件模擬1. 安裝SQLite2. 示例代碼:使用SQLite創建數據庫、表和插入數據3. 編譯和運行4. 示例運行輸出:5. 注意事項6. 總結080. 使用C語言實現簡單的數據庫操作 在…

2025年目前最新版本Android Studio自定義xml預覽的屏幕分辨率

一、前言 在實際開發項目當中&#xff0c;我們的設備的分辨率可能會比較特殊&#xff0c;AS并沒有自帶這種屏幕分辨率的設備&#xff0c;但是我們又想一邊編寫XML界面&#xff0c;一邊實時看到較為真實的預覽效果&#xff0c;該怎么辦呢&#xff1f;在早期的AS版本中&#xff…

Edge Databases:賦能分布式計算環境

Edge 計算通過將數據處理推向數據源頭徹底改變了傳統計算范式。隨著物聯網設備、移動應用和分布式系統的大規模部署&#xff0c;面向邊緣場景優化的數據庫解決方案已成為關鍵技術需求。這類專用數據庫能夠在算力有限、內存受限且網絡連接不穩定的終端設備上穩定運行&#xff0c…

Pluto論文閱讀筆記

主要還是參考了這一篇論文筆記&#xff1a;https://zhuanlan.zhihu.com/p/18319150220 Pluto主要有三個創新點&#xff1a; 橫向縱向用lane的query來做將軌跡投回柵格化地圖&#xff0c;計算碰撞loss對數據進行正增強和負增強&#xff0c;讓正增強的結果也無增強的結果相近&a…

【計算機網絡】傳輸層UDP協議

&#x1f525;個人主頁&#x1f525;&#xff1a;孤寂大仙V &#x1f308;收錄專欄&#x1f308;&#xff1a;計算機網絡 &#x1f339;往期回顧&#x1f339;&#xff1a; 【計算機網絡】應用層協議Http——構建Http服務服務器 &#x1f516;流水不爭&#xff0c;爭的是滔滔不…

「Java教案」順序結構

課程目標 1&#xff0e;知識目標 能夠正確使用Java順序結構的基本語法&#xff0c;例如變量的聲明、變量的賦值、表達式的計算、數據的輸出。能夠正確使用順序結構的執行規則及其在程序中的作用&#xff0c;解決實際問題。 2&#xff0e;能力目標 能夠獨立完成順序結構程序…

第八部分:階段項目 6:構建 React 前端應用

現在&#xff0c;是時候將你學到的 React 基礎知識付諸實踐&#xff0c;構建一個簡單的前端應用來模擬與后端 API 的交互了。在這個階段&#xff0c;你可以先使用模擬數據&#xff0c;或者如果你的后端 API&#xff08;階段項目 5&#xff09;已經搭建好&#xff0c;可以直接連…

GO語言----基礎類型取別名

文章目錄 取別名示例注意事項 Go語言中使用type關鍵字為基礎類型取別名。 type是Go語言中用于定義新類型的關鍵字&#xff0c;它提供了強大的類型定義能力。 取別名示例 type MyInt int注意事項 這創建了一個新類型MyInt&#xff0c;它底層是int類型&#xff0c;但與int是不同…

服務端定時器的學習(一)

一、定時器 1、定時器是什么&#xff1f; 定時器不僅存在于硬件領域&#xff0c;在軟件層面&#xff08;客戶端、網頁和服務端&#xff09;也普遍應用&#xff0c;核心功能都是高效管理大量延時任務。不同應用場景下&#xff0c;其實現方式和使用方法有所差異。 2、定時器解…

Mac版本Android Studio配置LeetCode插件

第一步&#xff1a;Android Studio里面找到Settings&#xff0c;找到Plugins&#xff0c;在Marketplace里面搜索LeetCode Editor。 第二步&#xff1a;安裝對應插件&#xff0c;并在Tools->LeetCode Plugin頁面輸入帳號和密碼。 理論上&#xff0c;應該就可以使用了。但是&a…

【ISP算法精粹】動手實戰:用 Python 實現 Bayer 圖像的黑電平校正

在數字成像領域&#xff0c;圖像信號處理器&#xff08;ISP&#xff09;如同幕后英雄&#xff0c;默默將傳感器捕獲的原始數據轉化為精美的圖像。而黑電平校正&#xff0c;作為ISP預處理流程中的關鍵一環&#xff0c;直接影響著最終圖像的質量。今天&#xff0c;我們就通過Pyth…

Oracle OCP與MySQL OCP認證如何選?

認證本質與定位差異 Oracle OCP Oracle OCP是Oracle公司推出的旗艦級數據庫專家認證&#xff0c;專注于其核心的閉源商業數據庫技術體系。核心領域包括RAC&#xff08;Real Application Clusters&#xff09;高可用集群、Data Guard容災解決方案、Exadata數據庫一體機集成以及…

MVVM、MVC的區別、什么是MVVM

一、什么是MVVM &#xff08;一&#xff09;定義 MVVM是Model - View - ViewModel的縮寫&#xff0c;它是一種軟件架構設計模式&#xff0c;主要用于構建用戶界面。這種模式將應用程序分為三個主要部分&#xff1a; Model&#xff08;模型層&#xff09; 它是應用程序中負責…

【SpringCache 提供的一套基于注解的緩存抽象機制】

Spring 緩存&#xff08;Spring Cache&#xff09;是 Spring 提供的一套基于注解的緩存抽象機制&#xff0c;常用于提升系統性能、減少重復查詢數據庫或接口調用。 ? 一、基本原理 Spring Cache 通過對方法的返回結果進行緩存&#xff0c;后續相同參數的調用將直接從緩存中讀…

HRI-2025 | 大模型驅動的個性化可解釋機器人人機交互研究

作者&#xff1a;Ferran Gebelli 1 ^{1} 1, Lavinia Hriscu 2 ^{2} 2, Raquel Ros 1 ^{1} 1, Sverin Lemaignan 1 ^{1} 1, Alberto Sanfeliu 2 ^{2} 2, Anais Garrell 2 ^{2} 2單位&#xff1a; 1 ^{1} 1PAL Robotics&#xff0c; 2 ^{2} 2IRI (UPC-CSIC)論文標題&#xff1a;P…