【问题标题】:Apache Tika - Getting Metadata Without Downloading FileApache Tika - 无需下载文件即可获取元数据
【发布时间】: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


【解决方案1】:

如果您将 URL 参数传递给 detect() 函数,Tika 能够确定文件的内容类型而无需全部下载。

Tika tika = new Tika();
String contentType = null;
try {
    contentType = tika.detect(new URL("a url"));
} catch (IOException e) {
    e.printStackTrace();
}

【讨论】:

    猜你喜欢
    • 2012-06-23
    • 1970-01-01
    • 2016-03-23
    • 2012-11-19
    • 2021-12-21
    • 1970-01-01
    • 2022-12-11
    • 1970-01-01
    • 2017-08-26
    相关资源
    最近更新 更多