近日做一个在线解压的插件,仅限制上传ZIP格式,自己尝试将原RAR的压缩包改扩展名为ZIP,骗过了扩展名验证,但在解压的时候出现了异常。于是在网上找验证文件真实格式的方法。
转自:http://blog.163.com/china__xuhua/blog/static/199723169201111161478889/
public static void CheckTrueFileName() { string path = @"D:\Sheet1.doc"; System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Open, System.IO.FileAccess.Read); System.IO.BinaryReader r = new System.IO.BinaryReader(fs); string bx = " "; byte buffer; try { buffer = r.ReadByte(); bx = buffer.ToString(); buffer = r.ReadByte(); bx += buffer.ToString(); } catch (Exception exc) { Console.WriteLine(exc.Message); } r.Close(); fs.Close(); //真实的文件类型 Console.WriteLine(bx); //文件名,包括格式 Console.WriteLine(System.IO.Path.GetFileName(path)); //文件名, 不包括格式 Console.WriteLine(System.IO.Path.GetFileNameWithoutExtension(path)); //文件格式 Console.WriteLine(System.IO.Path.GetExtension(path)); Console.ReadLine(); }
通过上面的方法,可以获取到选定文件的格式编码,然后在根据文件格式编码就可以知道这个文件是否是想要的真实格式了。
public enum FileExtension { JPG = 255216, GIF = 7173, BMP = 6677, PNG = 13780, COM = 7790, EXE = 7790, DLL = 7790, RAR = 8297, ZIP = 8075, XML = 6063, HTML = 6033, ASPX = 239187, CS = 117115, JS = 119105, TXT = 210187, SQL = 255254, BAT = 64101, BTSEED = 10056, RDP = 255254, PSD = 5666, PDF = 3780, CHM = 7384, LOG = 70105, REG = 8269, HLP = 6395, DOC = 208207, XLS = 208207, DOCX = 208207, XLSX = 208207, }
实例:string a=CheckTrueFileName();
if(a=="208207")那么这个文件就是excel文件。否则就不是。
不错,终于找到判断真实文件类型而兼顾性能的实现了。
谢谢!
@程序员老A:常来哦
技术宅,返回顶部你已经用上了啊
@山寨吧:嘎嘎
果断拿下——拿下的是那枚举~{smile:10}
@迷失之界:呔,你这斯把枚举留下
@小火柴:喝!秃驴敢和贫道抢枚举?