转载自:https://itbilu.com/nodejs/core/VJYaAfKrl.html
MIME
,即:Multipurpose Internet Mail Extensions,多用途互联网邮件扩展类型。其主要用途是设置某种扩展名的文件的响应程序类型,我们可以认为是当指定扩展名文件被访问时,浏览器会自动使用指定应用程序来打开。在HTTP中,是通过名为Content-Type
的HTTP头来设置或响应对应的文件类型的。例如:当服务器要向客户端发送的内容图类为.jpg图片,就需要将Content-Type
头设置为image/jpeg
,而客户端同样会根据Content-Type
对服务器内容进行解析。
MIME
和Content-Type
是文件类型设置和解板的标准。当服务器要对某种扩展名文件发送到客户端时,会根据文件扩展名设置Content-Type
头。而客户端(可以认为是浏览器),对服务器内容进行解析时也需要Content-Type
所代表的MIME
找到内容的解析程序。MIME
类型非常多,当我们在服务端设置发送内容格式时或当我们对服务端内容进行解析时,对几百种MIME
类型进行处理工作量会非常巨大。
推荐一个NPM包:mime
。mime
模块使用Apache项目的mime.types
文件,该文件包含了超过600个Content-Type
类型数据,并且支持添加自定义的MIME
类型。
1. mime
安装
mime
模块是一个基于mime-db
的MIME
类型解析及处理程序。
使用npm
安装模块:
npm install mime
安装后,mime
模块测试:
npm run test
mime
模块安装后,可以命令行下使用(命令行下使用需要npm install -g
全局安装),格式如下:
mime [path_string]
如,mime
模块查看当前目录下app.js
文件的类型:
mime app.js //application/javascript
2. mime
模块的查询API
通过mime
模块可以通过文件及其扩展查询与文件关联的MIME
类型,也可以通过MIME
类型反向查找文件的扩展名。
2.1 查询文件的类型mime.lookup(path)
使用mime
模块查询文件的MIME
类型:
var mime = require('mime'); mime.lookup('/path/to/file.txt'); // => 'text/plain' mime.lookup('file.txt'); // => 'text/plain' mime.lookup('.TXT'); // => 'text/plain' mime.lookup('htm'); // => 'text/html'
mime.default_type
返回默认类型
当通过mime.lookup()
查找的文件MIME
类型不存在时会返回application/octet-stream
类型。mime.lookup()
查找的文件时路径不区分大小写。可以通过mime.default_type
返回当前使用的默认类型。
2.2 查询文件护展名mime.extension(type)
mime
模块提供了查询文件扩展名的方法,我们可以通过Content-Type
所表示的MIME
类型查找到文件的扩展名,并最终确认内容解析形式和解析程序。
mime.extension('text/html'); // => 'html' mime.extension('application/octet-stream'); // => 'bin'
2.3 查找类型编码mime.charsets.lookup()
通过mime
模块可以查询MIME
类型所使用的编码:
mime.charsets.lookup('text/plain'); // => 'UTF-8'
3. mime
自定义类型
当mime
模块自带的mime-db
库不存在或不能满足我们所需的MIME
类型时,还可以自定义MIME
类型。
3.1 自定义类型mime.define()
mime.define(obj)
该方法接受一个参数obj
,是一个表示mime类型/扩展名
的对象。
mime.define({ 'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'], 'application/x-my-type': ['x-mt', 'x-mtt'], // etc ... }); mime.lookup('x-sft'); // => 'text/x-some-format'
3.2 加载类型文件mime.load(filepath)
mime
模块支持从一个Apache的mime.types
文件加载MIME
类型,相对于自定义类型,从现有文件中加载类型更为方便:
mime.load('./my_project.types');