java如何实现判断文件的真实类型
发布时间 - 2026-01-11 02:48:24 点击率:次在文件传输过程中,为了安全验证,对于手工改动文件后缀名产生的伪造文件进行判断过滤。

比如,我们需要的是excel文件,如果不加验证内容,将一些可执行的文件通过更改后缀传输给你,就是一个很大的漏洞了。
Java判断文件真实类型依靠的是文件的头部编码信息,具体代码如下:
package com.zhuifeng.util.excel;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.HashMap;
/**
* @author guoxk
*
* 类描述:获取和判断文件头信息
* |--文件头是位于文件开头的一段承担一定任务的数据,一般都在开头的部分。
* |--头文件作为一种包含功能函数、数据接口声明的载体文件,用于保存程序的声明(declaration),而定义文件用于保存程序的实现(implementation)。
* |--为了解决在用户上传文件的时候在服务器端判断文件类型的问题,故用获取文件头的方式,直接读取文件的前几个字节,来判断上传文件是否符合格式。
*
*/
public class CheckExcelFileTypeUtil {
// 缓存文件头信息-文件头信息
public static final HashMap<String, String> mFileTypes = new HashMap<String, String>();
static {
// images
mFileTypes.put("FFD8FF", "jpg");
mFileTypes.put("89504E47", "png");
mFileTypes.put("47494638", "gif");
mFileTypes.put("49492A00", "tif");
mFileTypes.put("424D", "bmp");
//
mFileTypes.put("41433130", "dwg"); // CAD
mFileTypes.put("38425053", "psd");
mFileTypes.put("7B5C727466", "rtf"); // 日记本
mFileTypes.put("3C3F786D6C", "xml");
mFileTypes.put("68746D6C3E", "html");
mFileTypes.put("44656C69766572792D646174653A", "eml"); // 邮件
mFileTypes.put("D0CF11E0", "doc");
mFileTypes.put("D0CF11E0", "xls");//excel2003版本文件
mFileTypes.put("5374616E64617264204A", "mdb");
mFileTypes.put("252150532D41646F6265", "ps");
mFileTypes.put("255044462D312E", "pdf");
mFileTypes.put("504B0304", "docx");
mFileTypes.put("504B0304", "xlsx");//excel2007以上版本文件
mFileTypes.put("52617221", "rar");
mFileTypes.put("57415645", "wav");
mFileTypes.put("41564920", "avi");
mFileTypes.put("2E524D46", "rm");
mFileTypes.put("000001BA", "mpg");
mFileTypes.put("000001B3", "mpg");
mFileTypes.put("6D6F6F76", "mov");
mFileTypes.put("3026B2758E66CF11", "asf");
mFileTypes.put("4D546864", "mid");
mFileTypes.put("1F8B08", "gz");
}
/**
* @author guoxk
*
* 方法描述:根据文件路径获取文件头信息
* @param filePath 文件路径
* @return 文件头信息
*/
public static String getFileType(String filePath) {
// System.out.println(getFileHeader(filePath));
// System.out.println(mFileTypes.get(getFileHeader(filePath)));
return mFileTypes.get(getFileHeader(filePath));
}
/**
* @author guoxk
*
* 方法描述:根据文件路径获取文件头信息
* @param filePath 文件路径
* @return 文件头信息
*/
public static String getFileHeader(String filePath) {
FileInputStream is = null;
String value = null;
try {
is = new FileInputStream(filePath);
byte[] b = new byte[4];
/*
* int read() 从此输入流中读取一个数据字节。int read(byte[] b) 从此输入流中将最多 b.length
* 个字节的数据读入一个 byte 数组中。 int read(byte[] b, int off, int len)
* 从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。
*/
is.read(b, 0, b.length);
value = bytesToHexString(b);
} catch (Exception e) {
} finally {
if (null != is) {
try {
is.close();
} catch (IOException e) {
}
}
}
return value;
}
/**
* @author guoxk
*
* 方法描述:将要读取文件头信息的文件的byte数组转换成string类型表示
* @param src 要读取文件头信息的文件的byte数组
* @return 文件头信息
*/
private static String bytesToHexString(byte[] src) {
StringBuilder builder = new StringBuilder();
if (src == null || src.length <= 0) {
return null;
}
String hv;
for (int i = 0; i < src.length; i++) {
// 以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式,并转换为大写
hv = Integer.toHexString(src[i] & 0xFF).toUpperCase();
if (hv.length() < 2) {
builder.append(0);
}
builder.append(hv);
}
// System.out.println(builder.toString());
return builder.toString();
}
/**
* @author guoxk
*
* 方法描述:测试
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
final String fileType = getFileType("E:\\补贴名单.xls");
System.out.println(fileType);
}}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# java
# 判断文件类型
# java判断文件的类型
# java如何判断文件类型
# Android中Java根据文件头获取文件类型的方法
# java文件对话框过滤特定文件类型示例
# javascrip客户端验证文件大小及文件类型并重置上传
# 的是
# 最多
# 上传文件
# 组中
# 几个
# 给你
# 都在
# 转换成
# 不加
# 转换为
# 可执行
# 大家多多
# 是否符合
# 过程中
# 文件传输
# 头文件
# png
# tif
# gif
# gt
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
在centOS 7安装mysql 5.7的详细教程
Laravel如何使用Sanctum进行API认证?(SPA实战)
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
微信小程序制作网站有哪些,微信小程序需要做网站吗?
Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全
Laravel如何保护应用免受CSRF攻击?(原理和示例)
Swift中循环语句中的转移语句 break 和 continue
Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
nodejs redis 发布订阅机制封装实现方法及实例代码
Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
如何获取上海专业网站定制建站电话?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
javascript日期怎么处理_如何格式化输出
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置
如何快速搭建FTP站点实现文件共享?
如何用AWS免费套餐快速搭建高效网站?
Laravel定时任务怎么设置_Laravel Crontab调度器配置
Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧
HTML 中如何正确使用模板变量为元素的 name 属性赋值
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】
JS中对数组元素进行增删改移的方法总结
UC浏览器如何设置启动页 UC浏览器启动页设置方法
Python高阶函数应用_函数作为参数说明【指导】
Laravel如何实现用户密码重置功能?(完整流程代码)
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
Laravel如何记录自定义日志?(Log频道配置)
Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】
深圳网站制作培训,深圳哪些招聘网站比较好?
如何用景安虚拟主机手机版绑定域名建站?
Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)
HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】
活动邀请函制作网站有哪些,活动邀请函文案?
Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理
javascript基于原型链的继承及call和apply函数用法分析
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
Laravel的.env文件有什么用_Laravel环境变量配置与管理详解
iOS UIView常见属性方法小结
iOS中将个别页面强制横屏其他页面竖屏
悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】
智能起名网站制作软件有哪些,制作logo的软件?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
非常酷的网站设计制作软件,酷培ai教育官方网站?
如何在阿里云域名上完成建站全流程?
googleplay官方入口在哪里_Google Play官方商店快速入口指南
如何快速生成可下载的建站源码工具?

