import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.util.Arrays; /** * * 文件类型校验 Spring3及以上 依赖Spring-core.jar和commons-io-xx.jar * */ public class FileValidateType { /** * 文件头信息,十六进制信息,取前4位 * 50 4b 03 04 office 2007+ * d0 cf 11 e0 office 97-03 * 25 50 44 46 pdf * ff d8 ff e0 jpg,部分png与jpg文件前4为一样 * ff d8 ff e1 jpg,一种不同的jpg头文件 www.2cto.con * 89 50 4e 47 png * 47 49 46 38 gif * 49 49 2A 00 tif * 42 4D bmp * 38 42 50 53 psd * 41 43 31 30 dwg * 252150532d41646f6265 ps * 0D0A0D0A txt * 0D0A2D2D txt * 0D0AB4B4 txt * B4B4BDA8 txt,文件头部为汉字 * 73646673 txt,文件头部为英文字母 * 32323232 txt,文件头部内容为数字 * 0D0A09B4 txt,文件头部内容为数字 * 3132330D txt,文件头部内容为数字 * 7B5C727466 rtf 日记本 * * //视频或音频类 * 3026B275 wma * 57415645 wav * 41564920 avi * 4D546864 mid * 2E524D46 rm * 000001BA mpg * 000001B3 mpg * 6D6F6F76 mov * 3026B2758E66CF11 asf * * 压缩包 * 52617221 rar * 1F8B08 gz * * 程序文件 * 3C3F786D6C xml * 68746D6C3E html * 7061636B java * 3C254020 jsp * 4D5A9000 exe * * * 44656C69766572792D646174653A eml * 邮件 5374616E64617264204A mdb * //Access数据库文件 * * 46726F6D mht 4D494D45 mhtml */ public static final String FILE_TYPE_OFFICE_97_03 = "d0cf11e0"; public static final String FILE_TYPE_OFFICE_07 = "504b0304"; public static final String FILE_TYPE_OFFICE_PDF = "25504446"; public static final String FILE_TYPE_OFFICE_JPG1 = "ffd8ffe0"; public static final String FILE_TYPE_OFFICE_JPG2 = "ffd8ffe1"; public static boolean validataType(byte[] bt, String[] costomTypes) { String Types = Arrays.toString(costomTypes).substring(1, Arrays.toString(costomTypes).length() - 1); Types = Types.replaceAll(", ", " "); if (bt != null) { int size = bt.length; String hex = null; StringBuilder contentType = new StringBuilder(); for (int i = 0; i < size; i++) { hex = Integer.toHexString(bt[i] & 0xFF); if (hex.length() == 1) hex = "0" + hex; contentType.append(hex); if (i > 2) break; if (Types.indexOf(contentType.toString()) > -1) return Boolean.TRUE; } } return Boolean.FALSE; } /* * private static boolean validateType(String path,String[] costomTypes){ * boolean flag=false; try { flag = * FileValidateType.validataType(FileUtils.readFileToByteArray * (ResourceUtils.getFile("classpath:"+path)), costomTypes); } catch * (IOException e) { e.printStackTrace(); } return flag; } */ /** * 从输入流获取数据 * * @param inputStream * @return * @throws Exception */ public static byte[] readInputStream(InputStream inputStream) throws Exception { byte[] buffer = new byte[1024]; int len = -1; ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); while ((len = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, len); } outputStream.close(); return outputStream.toByteArray(); } }
相关推荐
本篇文章将深入探讨如何在Java中通过文件头内容来判断文件类型。 首先,了解文件头的基本概念。文件头是指文件开始的一段字节,不同的文件格式会有不同的文件头结构。例如,JPEG图像文件的开头通常是"FF D8 FF E0...
在Java中解析这种类型的文件,通常需要两个步骤:首先解压gzip,然后解包tar。这里我们将详细探讨两种不同的方法来实现这个过程。 方法一:使用Apache Commons Compress库 Apache Commons Compress库是Java社区...
`parseRequest`方法将表单数据转换为`FileItem`对象,然后我们可以通过判断`isFormField()`来区分普通字段和上传的文件。对于每个文件项,我们可以调用`write`方法将其保存到服务器指定的位置。 这个"java文件上传...
### Java 判断题知识点解析 #### 第一章 Java 概述 1. **Java 语言具有良好的安全性与可移植性及平台无关性** 正确。Java 设计之初就考虑到了跨平台的需求,通过Java虚拟机(JVM)实现了“一次编写,到处运行”...
JavaUser-Agent解析库是用于处理和解析HTTP请求头中的User-Agent字符串的工具,这对于Web开发、数据分析或爬虫程序来说非常关键。User-Agent字符串包含了访问网站的客户端信息,如浏览器类型、版本、操作系统等。在...
2. **获取客户端IP地址**:在Web应用中,服务器需要区分每个客户端,`IpUtils`可能会有方法处理`HttpServletRequest`对象,从HTTP请求头(如`X-Forwarded-For`或`RemoteAddr`)中解析出真实客户端的IP地址。...
在设置`Content-Type`时,最好能够根据文件扩展名来自动判断文件类型,这样可以提高代码的健壮性。 ```java if (fileName.endsWith(".doc")) { response.setContentType("application/msword"); } else if ...
一个典型的Java程序框架结构包括类的定义、方法头和方法体,每个类和方法都可以有自己的修饰符、返回类型和名称。 其次,在基本语法格式方面,Java是区分大小写的,且每一行的代码通常都以分号(;)结束。注释在Java...
2. **返回值类型:** 如果方法的返回值类型为`Boolean`,那么推荐使用`is`或`has`前缀,以明确表示这是一个布尔类型的判断方法。例如,`getCurrentUser()`, `addUser()`, `hasAuthority()`。 #### 四、参数名...
4. **重载多态**:在Java中,为了区分重载的同名方法,主要通过改变形式参数列表,即参数的个数、顺序或类型,而不是返回类型或方法名前的类名。 5. **数组定义**:在Java中,正确的数组定义方式是`int[] a = new ...
Java中的数组可以存储基本数据类型(如`int`、`char`等)或者对象类型(如`String`、`Integer`等)。 9. **Vector类中的对象不能是简单数据类型。** - 错误。`Vector`类可以存储任何类型的对象,包括基本数据类型...
【Java贪吃蛇游戏开发详解】 贪吃蛇是一款经典的电子游戏,其基本玩法是控制一个不断增长的蛇在有限的区域内移动,通过吃食物来延长自身长度,同时避免撞到自身或边界。在这个Java实现的贪吃蛇项目中,特别加入了...
JavaScript库如jQuery或React可以用来处理用户选择的文件,提供进度反馈,以及验证文件类型和大小。 2. **表单提交**:传统方式是通过HTTP的POST请求发送文件,现代做法则常使用FormData对象,它可以封装文件和其他...
参数列表可以是参数个数不同,参数类型不同,但返回值类型不同不能作为重载区分的条件。 5. 数组定义:Java中定义数组的正确格式是先指定数组类型,后跟数组名和数组初始化。因此,选项B“inta=newint[10]”是正确...
- **版权信息**:文件头部包含版权声明。 - **package/imports**:`package` 声明在前,`import` 按照字母顺序排列,优先标准库,避免过多的通配符导入(如 `java.io.*`)。 - **类注释**:解释类的功能和用途。 ...
在传输文件时,我们需要判断Socket接收的数据类型,因为文本聊天和文件传输的数据格式不同。通常,可以通过在数据包头部添加标识符来区分字符串和文件。例如,可以约定字符串消息以特定字符开始和结束,而文件传输则...
### Java编程规范CheckList知识点详解 #### 一、概述 本文档旨在提供一份详尽的Java编程规范CheckList,帮助开发者遵循一致且高质量的编码标准。文档以表格形式列出了一系列编程过程中需要注意的关键事项,覆盖了...
- 文件头注释:包含版权信息、文件名称、文件版本、作者、创建日期等内容。 - 包声明:放在文件的第一行,紧跟在文件头注释之后。 - 导入语句:按逻辑分类分组并排序,如按标准库、第三方库和个人项目库顺序排列...
- **解析**: 在Java中,强制类型转换是指将一个较长的数据类型转换为较短的数据类型的过程。 **10. 整数除法** - **知识点**: Java中的整数运算。 - **选项分析**: - A、`2` - B、`2.0` - C、`.50` - D、`2.5`...
在JavaServer Pages (JSP) 中,文件上传是一项常见的任务,尤其在开发Web应用程序时,例如用户需要上传图片、文档或其他类型的数据。JSP通过使用Servlet API和特定库,如Apache Commons FileUpload,可以实现这一...