標籤:blank 測試 接受 程式 file 模組安裝 參數 obj 相對
轉載自: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‘);
mime模組響應或設定Node.js的Content-Type頭