Apache Tika 无法检测输入流的文件类型,但它可以归档

问题描述 投票:0回答:1

我可以使用 Apache Tika 检测 aac 文件的文件类型(音频/x-aac),如下所示:

File file = new File("/path/to/file");
Tika tika = new Tika();
System.out.println(tika.detect(file));

但是,当我尝试检测InputStream的文件类型时,同一文件(aac文件)的文件类型被检测为application/octet-stream。

我可以将 inputStream 转换为文件,但我不想将文件写入磁盘以检测文件类型。那么,如何使用这种方法正确检测文件类型而不将文件写入磁盘呢?

这是我将文件获取为 MultipartFile 的控制器方法:

@PostMapping("/upload")
public void uploadDocument(
    @RequestParam("file") MultipartFile file,
    @RequestParam(value = "fileName") String fileName {

    Tika tika = new Tika();
    String type = tika.detect(file.getInputStream(), fileName); // -> returns "application/octet-stream"

    // code omitted 
}
java file upload inputstream apache-tika
1个回答
0
投票

我遇到了类似的问题,经过彻底的调试,我发现我正在使用的InputStream之前已被另一个函数消耗过。因此,InputStream 已经位于其末尾。执行

inputStream.reset()
功能无效。

要解决此问题,我必须在调用 tika.detect(inputStream) 函数之前重新加载 InputStream

,以确保正确检测到 
Content-Type

© www.soinside.com 2019 - 2024. All rights reserved.