轉載自: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');