上传文件时经常需要做文件类型判断,例如图片、文档等,普通做法是直接判断文件后缀名,而文艺青年为了防止各种攻击同时也会加上使用文件头信息判断文件类型。

原理很简单:用文件头判断,直接读取文件的前2个字节即可。

Demo

using System;

using System.IO;

namespace HelloWorld

{

class Program

{

static void Main(string[] args)

{

FileStream fs = new FileStream(@"C:\test.rar", FileMode.Open, FileAccess.Read);

BinaryReader reader = new BinaryReader(fs);//转换为二进制流

byte[] buff = new byte[2];

string result = string.Empty;

try

{

fs.Read(buff, 0, 2);

result = buff[0].ToString() + buff[1].ToString();

}

catch (Exception ex)

{

throw ex;

}

reader.Close();

fs.Close();

if (result == "8297")//rar:8297

{

Console.WriteLine("文件格式是rar." + result);

}

else

{

Console.WriteLine("文件格式不是rar." + result);

}

Console.ReadLine();

}

}

}

附常见文件的文件头信息

常见文件的文件头(十进制)

jpg: 255,216

gif: 71,73

bmp: 66,77

png: 137,80

doc: 208,207

docx: 80,75

xls: 208,207

xlsx: 80,75

js: 239,187

swf: 67,87

txt: 70,67

mp3: 73,68

wma: 48,38

mid: 77,84

rar: 82,97

zip: 80,75

xml: 60,63

常用文件的文件头如下(16进制):

JPEG (jpg),文件头:FFD8FF

PNG (png),文件头:89504E47

GIF (gif),文件头:47494638

TIFF (tif),文件头:49492A00

Windows Bitmap (bmp),文件头:424D

CAD (dwg),文件头:41433130

Adobe Photoshop (psd),文件头:38425053

Rich Text Format (rtf),文件头:7B5C727466

XML (xml),文件头:3C3F786D6C

HTML (html),文件头:68746D6C3E

Email [thorough only] (eml),文件头:44656C69766572792D646174653A

Outlook Express (dbx),文件头:CFAD12FEC5FD746F

Outlook (pst),文件头:2142444E

MS Word/Excel (xls.or.doc),文件头:D0CF11E0

MS Access (mdb),文件头:5374616E64617264204A

WordPerfect (wpd),文件头:FF575043

Postscript (eps.or.ps),文件头:252150532D41646F6265

Adobe Acrobat (pdf),文件头:255044462D312E

Quicken (qdf),文件头:AC9EBD8F

Windows Password (pwl),文件头:E3828596

ZIP Archive (zip),文件头:504B0304

RAR Archive (rar),文件头:52617221

Wave (wav),文件头:57415645

AVI (avi),文件头:41564920

Real Audio (ram),文件头:2E7261FD

Real Media (rm),文件头:2E524D46

MPEG (mpg),文件头:000001BA

MPEG (mpg),文件头:000001B3

Quicktime (mov),文件头:6D6F6F76

Windows Media (asf),文件头:3026B2758E66CF11

MIDI (mid),文件头:4D546864

转载于:https://www.cnblogs.com/fanyong/archive/2012/03/21/2409582.html

利用文件头判断文件类型相关推荐

  1. python如何区分文件类型_python通过文件头判断文件类型

    对于提供上传的服务器,需要对上传的文件进行过滤. 本文为大家提供了python通过文件头判断文件类型的方法,避免不必要的麻烦. 分享代码如下 import struct # 支持文件类型 # 用16进 ...

  2. php读取某类型文件代码,php代码实现读取文件头判断文件类型

    php代码实现读取文件头判断文件类型,支持图片.rar.exe等后缀. 案例: //为图片的路径可以用d:/upload/11.jpg等绝对路径 $file = fopen($filename, &q ...

  3. 根据文件头判断文件类型

    10个字节判断 [java] view plaincopy private static final HashMap<String, String> mFileTypes = new Ha ...

  4. 通过16进制文件头判断文件类型

    package cn.edu.hactcm.cfcms.utils; import java.io.FileInputStream; import java.io.IOException; impor ...

  5. java文件头_Java根据文件头判断文件类型

    public class FileType { private final static Map FILE_TYPE_MAP = new HashMap(); private FileType(){} ...

  6. python 通过文件头获取文件类型mimetype

    一.MIME Type是什么? 资源的媒体类型 MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型.是设定某种扩展名的文件用一种应用程序打开 ...

  7. 根据文件头判断文件真实类型,让更改后缀的文件无所遁形!

    MultipartFile转为File package cn.com.ebidding.web.file.util; import org.springframework.web.multipart. ...

  8. java判断文件头_java通过文件头来判断文件类型

    importjava.io.FileInputStream;importjava.io.IOException;importjava.util.HashMap;importjava.util.Map. ...

  9. SpringBoot 文件上传 通过Content-Type和文件头判断文件类型

    SpringBoot 文件上传 通过Content-Type和文件头判断文件类型 一.关于MIME MIME的全称是Multipurpose Internet Mail Extensions,即多用途 ...

最新文章

  1. git 关于commit命令的修改
  2. R语言使用两个分类变量创建双向表(Two Way Table、两个分类变量的频率表)实战: 矩阵的双向表、dataframe的双向表、条形图和马赛克图来可视化频率表
  3. Python学习笔记一:数据类型转换
  4. matlab安装配置vc出错,64位系统安装matlab出现mexopts.bat及出现缺少或无法安装c++ compilers 故障的解决办法.pdf...
  5. 「CodePlus 2017 12 月赛」火锅盛宴
  6. 演练 获取所有电视频道 FullChannels.xml c# 1614256914
  7. linux系统重启方式,查看linux系统重启的命令和方式
  8. IO 设备的分类与概念、IO控制器
  9. python实现奇异值分解_奇异值分解原理及Python实例
  10. win10计算机系统优化设置,Win10不如win7?超实用win10系统优化设置,让电脑运行更流畅!...
  11. 什么是取整?有几种取整方式?C语言又是哪种方式?取模取余一样吗?
  12. 鸿蒙渊主线任务,天下3易信公众平台
  13. 《商业数据分析》读书笔记(一)
  14. Tello:无人机新姿势识别(小创实验)
  15. vue 条件判断绑定内联样式
  16. 不舍红尘,只因恋上你
  17. AutoCAD Electrical 2022—线的相关属性
  18. Picasso图片加载框架的使用
  19. 金山快盘开发 (一)
  20. 中间件金蝶的编码设置

热门文章

  1. 大型网站架构模式之三
  2. 如果有一个类是 myClass , 关于下面代码正确描述的是?
  3. java:volatile,instanceof,strictfp关键字
  4. jvm十:类加载器解析
  5. sidekiq安装及使用
  6. JavaScript 中对象的属性类型
  7. 【ASM 翻译系列第二弹:ASM 12C 版本新特性】
  8. 转 使用putty从linux主机上面往windows主机下面拷贝文件
  9. 70后、80后、90后程序员区别极端版
  10. 微信小程序 bindtap 绑定事件