UNPKG

node-web-mvc

Version:
59 lines (58 loc) 1.8 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); /** * @module MediaTypeFactory * @description 媒体类型工厂 */ const path_1 = __importDefault(require("path")); const fs_1 = __importDefault(require("fs")); const MediaType_1 = __importDefault(require("../MediaType")); const file = path_1.default.join(__dirname, '../../../../mime.type'); const runtime = { mimeTypes: null, }; class MediaTypeFactory { /** * 加载所有MIME类型 */ static load() { const content = fs_1.default.readFileSync(file).toString('utf-8'); const lines = content.split('\n'); const mediaTypes = {}; lines.forEach((line) => { if (line[0] !== '#') { const segments = line.split('\t'); const mediaType = segments.shift(); const exts = (segments.find((s) => !!s) || '').split(' ').filter((s) => !!s); exts.forEach((ext) => { mediaTypes['.' + ext] = new MediaType_1.default(mediaType); }); } }); return mediaTypes; } /** * 当前支持的所有MIME类型 */ static get mimeTypes() { if (!runtime.mimeTypes) { runtime.mimeTypes = this.load(); } return runtime.mimeTypes; } /** * 获取指定文件的媒体类型 * @param filename */ static getMediaType(filename) { if (!filename) { return null; } const ext = path_1.default.extname(filename).toLowerCase(); return this.mimeTypes[ext]; } } exports.default = MediaTypeFactory;