【发布时间】:2021-06-10 08:58:39
【问题描述】:
我一直在尝试实现一个应用程序来确定任何文件的内容类型。我使用 Apache Tika 来确定。
这是一个基本的代码实现:
InputStream fileStream = ContentTypeController.class.getClassLoader().getResourceAsStream(fileName);
Tika tika = new Tika();
String contentType = null;
try {
contentType = tika.detect(fileStream);
} catch (IOException e) {
e.printStackTrace();
}
我必须从 Openstack 下载文件以确定文件内容类型,而不是上面的代码。某些文件超过 100GB,下载所有文件很繁重。
我不知道如何克服下载所有文件的必要性,希望您有任何想法/解决方案而不下载所有文件
【问题讨论】:
-
如果您想要元数据,您唯一的选择是给 Tika 整个文件 - 元数据可以存储在文件中的任何位置,具体取决于类型。但是,您的代码没有对元数据做任何事情,那么您在追求什么?
-
正如@Gagravarr 所说,您无法可靠地从部分文件中获取元数据。不过,在我看来,您只需要文件类型。如果是这样,有一个主要警告,您应该能够获得前 1000 个左右字节的文件类型。主要警告是您无法获取“容器”文件的特定 mime 类型,例如,如果您只使用 docx(基于 zip 的格式)的前 1000 个字节,Tika 可能会返回“application/zip”。您需要完整文件才能对容器格式(基于 zip 和基于 ole2)进行精确类型检测,但最好使用 pdf、mp4 等...
标签: stream mime-types content-type apache-tika