一般情况下,都是通过multipleFile来接收文件。但是tika是判断file 的。所以需要一个工具类将multiplefile转成file
package com.cloudDisk.utils.file;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
* @author 成大事
* @since 2022/5/11 10:20
public class MultipartFileToFile {
* MultipartFile 转 File
* @param file
* @throws Exception
public static File multipartFileToFile(MultipartFile file) throws Exception {
File toFile = null;
if (file.equals("") || file.getSize() <= 0) {
file = null;
} else {
InputStream ins = null;
ins = file.getInputStream();
toFile = new File(file.getOriginalFilename());
inputStreamToFile(ins, toFile);
ins.close();
return toFile;
private static void inputStreamToFile(InputStream ins, File file) {
try {
OutputStream os = new FileOutputStream(file);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
os.write(buffer, 0, bytesRead);
os.close();
ins.close();
} catch (Exception e) {
e.printStackTrace();
* 删除本地临时文件
* @param file
public static void deleteTempFile(File file) {
if (file != null) {
File del = new File(file.toURI());
del.delete();
@GetMapping("/testUpload")
public R testUpload(
@RequestParam("file") MultipartFile file
) throws Exception {
String mimeType = FileTypeJudge.getMimeTypeFile(file);
log.info("tika 的格式{}",mimeType);
return R.ok(mimeType);
使用apiPost 测试发送文件
查看:
就是不能直接对multiplefile的类型进行判断,得先转换成file的类型。之前参考的一篇博客
https://blog.csdn.net/weixin_43194885/article/details/109747552
可以实现简单的一些文件的判断。但是比如pptx,word还有xlsx都识别成application/zip。所以还是有问题。希望能解决的大佬可以帮忙指正修改一下。
使用Tika进行文件类型校验
Tika是什么
我们都知道,普通的文件后缀校验并不能校验出这个文件的类型,大部分的文件类型校验都是通过获取文件的魔数来判断文件的类型,因为对于大多数类型文件来说他的魔数是固定的(例如class文件的魔数就是:CA FE )。所以目前大部分网络上找到的处理方案是将各个文件的魔数放倒Map集合中,然后通过获取文件的魔数,从Map集合查找对应的文件类型。但是同类型的文件的魔数真的都是固定的么?事实上并不是这样的,mp4文件的魔数就不是固定的。那就是意味着,你放了一个mp4的魔数
Tika可以用来提取office、PDF、HTML、txt等常用文件中得文本(在提取文本时,图片是无法提取的,会被丢弃),方便Lucene进行文本的生成索引和检索。
Tika的用法很简单,但是依赖包有些多,导入包后,使用方法如下:
package com.johnny.lucene05.lucene_plugin.tika;
import java.io.File;
import
Tika是Apache的Lucene项目下面的子项目,在lucene的应用中可以使用tika获取大批量文档中的内容来建立索引,非常方便,也很容易使用~
Tika的缺点就是都是依赖外部的jar包,导致jar包的重量太大,lucene的核心包只有1M,tika约20M,tika依
.doc application/msword
.dot application/msword
.docx application/vnd.openxmlformats-officedocument.wordprocessingml.document
.dotx application/vnd.openxmlformats-officedocument.wordprocessingml.template
.docm application/vnd.ms-word.documen
使用tika判断文件类型,不会产生临时文件的方法
因为后缀判断文件不安全,所以最近找了找判断文件类型的其他方法,总结就是使用文件后缀和文件头来判断或者基于tika和文件后缀一同来做文件类型的判断,本次使用tika的方式来做文件类型判断,至于于配合个文件后缀的方法就不写了不是很难,就自己加上吧动动双手成就未来.
首先是依赖
就去maven repository中搜索tika-core就好了
还有一个tika-parsers咱没弄明白他是做什么的如果有了解的大佬可以评论一下
以下就是我的的代码区别就是因为使用s
文件头信息判断
通常可以判断文件类型,但有些文件类型无法判断(如word和excel头信息的前几个字节是一样的,无法判断)
使用apache.tika可轻松解决以上两种方式存在的问题使用apache.tika判断文件类型1. maven依赖<!-- https://mvnrepository.com/artifact/o
Apache Tika用于文件类型检测和从各种格式的文件中提取文本内容。
Tika的使用方式很简单:
public void testTikaParseEmlWithDocAttachment() throws TikaException, SAXException, IOException {
String filename="eml-with-doc-attachment-test.eml";
AutoDetectParser autoParser
try (InputStream is = theInputStream;
BufferedInputStream bis = new BufferedInputStream(is);) {
AutoDetectParser parser = new AutoDetectParser();
Detector detector = parser.getDetecto...
假设有一批文档,格式有DOC、DOCX、PPT、PPTX、TXT、PDF这几种,实现一个类似百度文库的文件检索系统,需求如下。
(1)能够对文件名进行检索。
(2)能够对文件内容进行检索。
(3)能够下载检索到的文件。
(4)能够实现关键字的高亮。
2、架构设计
概括如下,文件存储系统中存放了不同类型的文件,后台通过程序提取出文件名和文件内容,使用Lucene对文件名和文件内容进行...
我有ms文档包含文本和图像.我想解析它们以获得xml结构.在研究之后,我最终使用apache tika来转换我的文档.我可以将我的doc解析为xml.这是我的代码:AutoDetectParser parser=new AutoDetectParser();InputStream input=new FileInputStream(new File("1.docx"));Metadata meta...