文件类型判断-FileTypeUtil
# 由来
在文件上传时,有时候我们需要判断文件类型。但是又不能简单的通过扩展名来判断(防止恶意脚本等通过上传到服务器上),于是我们需要在服务端通过读取文件的首部几个二进制位来判断常用的文件类型。
# 使用
这个工具类使用非常简单,通过调用FileTypeUtil.GetType
即可判断,这个方法同时提供众多的重载方法,用于读取不同的文件和流。
FileInfo file = new FileInfo(@"D:\test.jpg");
string fileType = FileTypeUtil.GetType(file);
Console.WriteLine("File type is: " + fileType);
// 输出结果为:File type is: .jpg
# 原理和局限性
这个类是通过读取文件流中前N个byte值来判断文件类型,在类中我们通过Map形式将常用的文件类型做了映射,这些映射都是网络上搜集而来。也就是说,我们只能识别有限的几种文件类型。但是这些类型已经涵盖了常用的图片、音频、视频、Office文档类型,可以应对大部分的使用场景。
# EasyTool.FileTypeUtil 类
静态工具类 FileTypeUtil,提供了一个静态方法GetType,用于根据文件流头部信息获得文件类型。
该工具类使用了一个简单的方法来判断文件类型,首先读取文件流的头部信息,然后根据头部信息中的16进制数值来判断文件类型。如果无法识别类型,则会按照扩展名进行判断。需要注意的是,该工具类仅适用于简单的文件类型判断,可能存在误判或漏判的情况。
FileTypeUtil可以方便地判断常见的文件类型,例如图片、文本、压缩文件等,而且不需要依赖外部库,使用非常方便。
# GetType-文件流头部信息获得文件类型
/// <summary>
/// 文件流头部信息获得文件类型
///
/// 说明:
/// 1、无法识别类型默认按照扩展名识别
/// 2、xls、doc、msi、ppt、vsd头信息无法区分,按照扩展名区分
/// 3、zip可能为docx、xlsx、pptx、jar、war头信息无法区分,按照扩展名区分
/// </summary>
/// <param name="file">文件</param>
/// <returns>类型,文件的扩展名,未找到为null</returns>
public static string GetType(FileInfo file)
上次更新: 2023/04/26, 22:10:06