我可以使用 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
}
我遇到了类似的问题,经过彻底的调试,我发现我正在使用的InputStream之前已被另一个函数消耗过。因此,InputStream 已经位于其末尾。执行
inputStream.reset()
功能无效。
要解决此问题,我必须在调用 tika.detect(inputStream)
函数之前重新加载 InputStream
,以确保正确检测到
Content-Type
。