Apache Tika 是一个内容分析工具包,可以检测上千种文件类型,并提取它们的元数据和文本。tika在设计上十分精巧,单一的接口使它易于使用,在搜索引擎索引,内容分析,翻译等诸多方面得到了广泛使用。
如解析文件是否是excel类型等
目录
一、使用
使用举例,判断文档是否是excel:
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-core</artifactId>
<version>1.24.1</version>
</dependency>
注意tika-core和tika-parsers的区别,我这里导入的是tika-core
核心使用:
//文档是excel,所以只能是xlsx或xls类型
public String judgeType(MultipartFile mFile){
Tika tika = new Tika();
String detect=null;
File file = new File(mFile.getOriginalFilename());
try {
FileUtils.copyInputStreamToFile(mFile.getInputStream(), file);
//重点代码,获得文件类型
detect = tika.detect(file);
System.out.println("文档类型");
System.out.println(detect);
if ("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet".equals(detect) || "application/vnd.ms-excel".equals(detect)){
return "类型正确"; //类型正确
}else {
return "请上传正确的文档类型,如:.xlsx和.xls";
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (file.exists()) {
file.delete();
}
}
// 会在本地产生临时文件,用完后需要删除
if (file.exists()) {
file.delete();
}
return "文档解析错误";
}
二、MultipartFile类转File类
其中,前端传过来的是MultipartFile类,所以后端要转换为File类,转换方法为
//MultipartFile转File
File file = new File(path);
FileUtils.copyInputStreamToFile(multipartFile.getInputStream(), file);
/*其中File可以
File file = new File(mFile.getOriginalFilename());
这是保存在了工程路径下,用完要删除
file.delete();
*/
//File转MultipartFile
File file = new File("src/test/resources/input.txt");
FileInputStream input = new FileInputStream(file);
MultipartFile multipartFile =new MockMultipartFile("file", file.getName(), "text/plain", IOUtils.toByteArray(input));
三、参考:
Tika:一个强大的Java文档内容解析工具(主要参考之一,必看)
apache tika判断文件类型(只需要参考它后面的文档类型)