文件類型判斷-FileTypeUtil
由來
在文件上傳時,有時候我們需要判斷文件類型。但是又不能簡單的通過擴展名來判斷(防止惡意腳本等通過上傳到服務器上),於是我們需要在服務端通過讀取文件的首部幾個二進制位來判斷常用的文件類型。
使用
這個工具類使用非常簡單,通過調用FileTypeUtil.getType
即可判斷,這個方法同時提供眾多的重載方法,用於讀取不同的文件和流。
File file = FileUtil.file("d:/test.jpg"); String type = FileTypeUtil.getType(file); //輸出 jpg則說明確實為jpg文件 Console.log(type);
原理和局限性
這個類是通過讀取文件流中前N個byte值來判斷文件類型,在類中我們通過Map形式將常用的文件類型做了映射,這些映射都是網絡上搜集而來。也就是說,我們只能識別有限的幾種文件類型。但是這些類型已經涵蓋了常用的圖片、音頻、視頻、Office文檔類型,可以應對大部分的使用場景。
對於某些文本格式的文件我們並不能通過首部byte判斷其類型,比如
JSON
,這類文件本質上是文本文件,我們應該讀取其文本內容,通過其語法判斷類型。