java对文件损坏校验

版权声明:本文为博主原创文章,转载时请在文章最前方附上本文地址。 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++;
			}

猜你喜欢

转载自blog.csdn.net/qq_35033270/article/details/84347658
今日推荐