当前位置:网站首页>基于tika实现对文件类型进行判断
基于tika实现对文件类型进行判断
2022-08-01 07:37:00 【天青色 等烟雨】
基于tika实现对文件类型进行判断
判断文件类型一般可采用两种方式
1. 后缀名判断
简单易操作,但无法准确判断类型
2. 文件头信息判断
通常可以判断文件类型,但有些文件类型无法判断(如word和excel头信息的前几个字节是一样的,无法判断)
使用tika就可轻松解决这两种方式存在的问题
首先要做的就是导入tika的包坐标
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-core</artifactId>
<version>1.24.1</version>
</dependency>
具体实现
package hkyxg.education.util;
import org.apache.tika.metadata.HttpHeaders;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.metadata.TikaMetadataKeys;
import org.apache.tika.mime.MediaType;
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.Parser;
import org.springframework.web.multipart.MultipartFile;
import org.xml.sax.helpers.DefaultHandler;
import java.io.InputStream;
import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class FileTypeUtil {
private static Pattern pattern = Pattern.compile("image/.*");
private static Pattern pattern2 = Pattern.compile("application/pdf");
/**
* 获取类型
* @param file
* @return
*/
public static String getMimeType(MultipartFile file) {
AutoDetectParser parser = new AutoDetectParser();
parser.setParsers(new HashMap<MediaType, Parser>());
Metadata metadata = new Metadata();
metadata.add(TikaMetadataKeys.RESOURCE_NAME_KEY, file.getName());
try (InputStream stream = file.getInputStream()) {
parser.parse(stream, new DefaultHandler(), metadata, new ParseContext());
}catch (Exception e){
throw new RuntimeException();
}
return metadata.get(HttpHeaders.CONTENT_TYPE);
}
/**
* 判断是否是图片
* @param file
* @return
*/
public static boolean isImage(MultipartFile file){
String type = getMimeType(file);
System.out.println(type);
//对比对应的文件类型的mime就好了
Matcher m = pattern.matcher(type);
return m.matches();
}
public static boolean isPdf(MultipartFile file){
String type = getMimeType(file);
System.out.println(type);
Matcher m = pattern2.matcher(type);
return m.matches();
}
}
tika是通过文件流来对文件类型进行判断的,与其他两种方式相比更加安全,方法也比较简单。
一些常见的mime type类型
image/bmp
image/x-bitmap
image/x-pixmap
image/jpg
image/png
image/jpeg
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx
application/x-rar-compressed
application/vnd.openxmlformats-officedocument.wordprocessingml.document docx
application/zip zip
image/tiff tiff
image/bmp bmp
application/rtf rtf
application/x-tika-ooxml xls
application/x-bplist pdf
application/pdf
application/vnd.ms-word.document.macroenabled.12 docm
image/gif
application/vnd.openxmlformats-officedocument.presentationml.presentation pptx
application/x-tika-msoffice pdf
application/msword
application/x-7z-compressed 7z
application/vnd.ms-xpsdocument xps
边栏推荐
- pytest接口自动化测试框架 | 跳过模块
- 升级为重量级锁,锁重入会导致锁释放?
- Explosive 30,000 words, the hardest core丨Mysql knowledge system, complete collection of commands [recommended collection]
- 配置我的kitty
- 爆肝3万字,最硬核丨Mysql 知识体系、命令全集 【建议收藏 】
- LabVIEW中局部变量和全局变量的分配
- GO错误处理方式
- 七夕来袭——属于程序员的浪漫
- Data organization -- singly linked list of the linear table
- Electromagnetic compatibility introductory tutorial (6) test project
猜你喜欢
sum of special numbers
金山打字通 官网 下载
Dart exception details
案例实践 --- Resnet经典卷积神经网络(Mindspore)
图片无损压缩软件哪个好用:试试完全免费的JPG-C 图片批量修整压缩减肥工具吧 | 最新jpg批量修整工具下载
Three aspects of Ali: How to solve the problem of MQ message loss, duplication and backlog?
rhcsa 第四天
Fist game copyright-free music download, League of Legends copyright-free music, can be used for video creation, live broadcast
Offer brush questions - 1
电磁兼容简明教程(6)测试项目
随机推荐
最小生成树
Zero-code website development tool: WordPress
22 Niu Ke Duo School 1 I. Chiitoitsu (Probability dp)
我三本学历,五面阿里,被面试官“供”着出来了,拿了33*15的Offer
JSON 与 JS 对象的区别
R语言使用tidyquant包的tq_transmute函数计算持有某只股票的天、月、周收益率、ggplot2使用条形图可视化股票月收益率数据、使用百分比显示Y轴坐标数据、使用不同的色彩表征正负收益率
Vim三种模式
好的plm软件有哪些?plm软件排行榜
LabVIEW中局部变量和全局变量的分配
【一句话攻略】彻底理解JS中的回调(Callback)函数
Chapter 9 of Huawei Deep Learning Course - Convolutional Neural Network and Case Practice
The log causes these pits in the thread block, you have to prevent
Dart exception details
22牛客多校1 C.Grab the Seat (几何 + 暴力)
POJ1251丛林之路题解
2022杭电多校第二场1011 DOS Card(线段树)
Data Analysis 6
app 自动化 通过工具查看app 元素 (三)
Golang: go to connect and use mysql
Classwork (7) - #598. remainder operation (mod)