在开发过程中长会用到,通过文件头来判断该文件究竟是什么文件类型,【仅仅通过后缀名判断,并不安全准确】整理一下常用文件文件头。
从Ultra-edit-32中提取:
后缀名 | 文件头 |
jpg | FFD8FF |
png | 89504E47 |
bmp | 424D |
gif | 47494638 |
255044462D312E | |
zip | 504B0304 |
rar | 52617221 |
doc | D0CF11E0 |
xlsx | 52617221 |
jpeg | FFD8FF |
Docx | 504B0304 |
apk | 504B0304 |
tif | 49492A00 |
dwg | 41433130 |
psd | 38425053 |
rtf | 7B5C727466 |
xml | 3C3F786D6C |
html | 68746D6C3E |
eml | 44656C69766572792D646174653A |
dbx | CFAD12FEC5FD746F |
pst | 2142444E |
mdb | 5374616E64617264204A |
wpd | FF575043 |
eps/ps | 252150532D41646F6265 |
qdf | AC9EBD8F |
pwl | E3828596 |
rar | 52617221 |
wav | 57415645 |
avi | 41564920 |
ram | 2E7261FD |
rm | 2E524D46 |
mpg | 000001BA |
mpg | 000001B3 |
mov | 6D6F6F76 |
asf | 3026B2758E66CF11 |
mid | 4D546864 |
ppt | D0CF11E0 |
pptx | 504B0304 |
使用方式:
简单来说,就是当我们上传一个文件的时候,后台会去取出上传文件的文件头与规定格式文件的标准文件头作比较,来判断上传的是否为真实要求的文件。
java:
String extHead = uf.getFileHead();
if (null == extHead)
{
throw new CtrlException(ErrorCode.IMG_UPLOAD_TYPE_ERR);
}
StringBuilder builder = new StringBuilder();
String hv;
int i = 0;
for (byte aSrc : filebyt)
{
if (i++ == extHead.length() / 2)
{
break;
}
// 以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式,并转换为大写
hv = Integer.toHexString(aSrc & 0xFF).toUpperCase();
if (hv.length() < 2)
{
builder.append(0);
}
builder.append(hv);
}
if (!extHead.equals(builder.toString()))
{
throw new CtrlException(ErrorCode.IMG_UPLOAD_TYPE_ERR);
}