MIME 媒体类型

这篇文章主要回答这些内容:

  • 如何思考解决这个问题?
  • 如何获取文件的MIME?
  • 如何实现MIME类型获取的工具?

起因:我准备实现一个HTTP服务器,在Response的 Content-Type 要设置文件类型,这种类型也是有规范的,那就是MIME,我现在需要一个工具获取文件的类型。

首先想到的是看能不能用jdk的工具,查了下jdk8有个 MimetypesFileTypeMap 类可以用,但我用的是jdk11,在这个版本已经剔除了这个类,如果用就需要增加一个依赖。这种方式的

使用方法:

在读这个jdk工具的源码后,发现这个工具并不是根据文件的魔数来判断的,是根据文件的扩展名判断的(e.g. .html),jdk工具存储了一个配置文件,以获取文件扩展名与MIME的映射关系。

魔数:是在文件内容中固定的一个数字,标识一类文件

jdk配置文件的部分内容:

了解到这一点,我想到所有的HTTP应该都有判断文件类型这步操作,我准备看下nginx的MIME配置,到了配置文件中,果然见到了配置文件。如下:

到这里我就明白了这个功能如何实现完成,把nginx或者jdk的配置文件内容转换成一个判断程序就行了。以下是这个工具的实现。

Java工具类实现

via