版权声明:本文为博主原创文章,转载时请在文章最前方附上本文地址。 https://blog.csdn.net/qq_35033270/article/details/84347658
文件损坏校验
1.背景
出于项目业务的需求,需要对上传文件处理,服务端需要甄别损坏文件,去拦截。则需要对上传的文件去判断,疏于搜索水平,谷歌了下没找到好的方法。则思考了一种目前看来可行的判别方法。
2.思路。
根据文件名,通过字符串分隔,判断出文件的现用格式。再引入tika包,对文件的实际格式进行判断,则与现用格式比较,不同,则为格式强制转换等损坏文件,这样,就滤除了此类损坏的文件。
3.过程。
(1).项目里引入tika包
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika</artifactId>
<version>1.18</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-parsers</artifactId>
<version>1.18</version>
</dependency>
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-core</artifactId>
<version>1.18</version>
</dependency>
(2).代码里使用
以下截取部分代码以作示例,具体业务,根据自身业务需要,以做变化,如有好的idea,欢迎讨论沟通。
Tika tika = new Tika();
// 标识损坏文件数
int n = 0;
// 标识损坏文件位置
int[] faultFlag = new int[multipartFiles.length];
//multipartFiles是上传的文件数组,根据自己的需求来获取真实名称,此处为我的业务场景。
String[] temp = multipartFiles[i].getOriginalFilename().split("\\.");
//获取文件现用格式
String fileType = temp[temp.length - 1];
if ("doc".equals(fileType)) {
// 正常doc:application/x-tika-msoffice ,正常txt:text/plain
if (!"application/x-tika-msoffice".equals(tika.detect(multipartFiles[i].getInputStream()))) {
// 对损坏文件标识
faultFlag[i] = 1;
n++;
}