Files.probeContentType() returns 在 OpenJDK 11 上为空
Files.probeContentType() returns null on OpenJDK 11
似乎 Files.probeContentType()
returns null
用于 OpenJDK 11 上的文件(MIME 类型未由其文件名指示),而它正在 OpenJDK 8 上工作(在 Linux x64 上)。这是什么原因?
注意:它可能适用于类型由其名称指示的文件,例如,“test.pdf”将生成“application/pdf”,但是将文件重命名为“test”会产生 null
.
文件类型检测在很大程度上是特定于平台的,不被认为是可靠的。例如,GnomeFileTypeDetector
在 JDK 8 中可用,但仅适用于 Linux 系统。
OpenJDK 开发人员已决定从 JDK 中删除 GnomeFileTypeDetector
和 MagicFileTypeDetector
(已在 JDK 9 中),请参阅 OpenJDK bug tracker and here.
可用检测器 MimeTypesFileTypeDetector
(在 Linux 上)或 RegistryFileTypeDetector
在 Windows 上只是实现从文件扩展名到 MIME 类型的映射,但不检查实际的文件内容。
(注意:在包 sun.nio.fs
中找到(或未找到)所有检测器实现。)
我在使用 Ubuntu 20.04 的 docker 容器上遇到了同样的问题。通常一个容器非常小并且有一些非常特殊的工具。
我解决了通过 apt 命令安装 libmagic-mgc 和 libmagic1 包,其中包含用于检查文件 MimeType 的著名命令“file”。
似乎 Files.probeContentType()
returns null
用于 OpenJDK 11 上的文件(MIME 类型未由其文件名指示),而它正在 OpenJDK 8 上工作(在 Linux x64 上)。这是什么原因?
注意:它可能适用于类型由其名称指示的文件,例如,“test.pdf”将生成“application/pdf”,但是将文件重命名为“test”会产生 null
.
文件类型检测在很大程度上是特定于平台的,不被认为是可靠的。例如,GnomeFileTypeDetector
在 JDK 8 中可用,但仅适用于 Linux 系统。
OpenJDK 开发人员已决定从 JDK 中删除 GnomeFileTypeDetector
和 MagicFileTypeDetector
(已在 JDK 9 中),请参阅 OpenJDK bug tracker and here.
可用检测器 MimeTypesFileTypeDetector
(在 Linux 上)或 RegistryFileTypeDetector
在 Windows 上只是实现从文件扩展名到 MIME 类型的映射,但不检查实际的文件内容。
(注意:在包 sun.nio.fs
中找到(或未找到)所有检测器实现。)
我在使用 Ubuntu 20.04 的 docker 容器上遇到了同样的问题。通常一个容器非常小并且有一些非常特殊的工具。 我解决了通过 apt 命令安装 libmagic-mgc 和 libmagic1 包,其中包含用于检查文件 MimeType 的著名命令“file”。