-
Notifications
You must be signed in to change notification settings - Fork 4
/
MIME.js
64 lines (55 loc) · 1.34 KB
/
MIME.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
const BASIC_MIME_DATA_LIST = [
'application/gzip;gz',
'application/javascript;js;mjs',
'application/json',
'application/pdf',
'application/xml',
'application/x-7z-compressed;7z',
'application/x-tar;tar',
'application/zip',
'audio/midi;mid',
'audio/mpeg;mp3',
'audio/ogg',
'audio/wav',
'audio/webm;weba',
'audio/x-flac;flac',
'font/ttf',
'font/otf',
'font/woff',
'font/woff2',
'image/bmp',
'image/gif',
'image/jpeg;jpg',
'image/png',
'image/svg+xml;svg',
'image/webp',
'image/x-icon;ico',
'text/css',
'text/csv',
'text/html;htm',
'text/plain;txt;text;conf;log;ini',
'text/rtf',
'text/xml',
'video/mp4;mp4v;mpg4',
'video/mpeg;mpg',
'video/webm', // should overwrite 'audio/webm'
'video/x-flv;flv',
'video/x-ms-wmv;wmv',
'video/x-msvideo;avi'
]
const DEFAULT_MIME = 'application/octet-stream'
const BASIC_EXTENSION_MAP = BASIC_MIME_DATA_LIST.reduce((o, mimeData) => {
const [ mime ] = mimeData.split(';')
mimeData.split('/')[ 1 ].split(';').forEach((extension) => (o[ extension ] = mime))
return o
}, {})
const REGEXP_EXTENSION = /\.(\w+)$/
const getMIMETypeFromFileName = (fileName) => {
const result = REGEXP_EXTENSION.exec(fileName)
return (result && BASIC_EXTENSION_MAP[ result[ 1 ] ]) || DEFAULT_MIME
}
export {
DEFAULT_MIME,
BASIC_EXTENSION_MAP,
getMIMETypeFromFileName
}