/* eslint-disable no-dupe-keys */ /** * Takes a file extension and returns it's MIME type * @param {string} fileName - file name including extension (example.pdf) * @returns {string} MIME Type */ function mimeType(fileName) { const mimeTypes = { '.3dm': 'x-world/x-3dmf', '.3dmf': 'x-world/x-3dmf', '.a': 'application/octet-stream', '.aab': 'application/x-authorware-bin', '.aam': 'application/x-authorware-map', '.aas': 'application/x-authorware-seg', '.abc': 'text/vnd.abc', '.acgi': 'text/html', '.afl': 'video/animaflex', '.ai': 'application/postscript', '.aif': 'audio/aiff', '.aif': 'audio/x-aiff', '.aifc': 'audio/aiff', '.aifc': 'audio/x-aiff', '.aiff': 'audio/aiff', '.aiff': 'audio/x-aiff', '.aim': 'application/x-aim', '.aip': 'text/x-audiosoft-intra', '.ani': 'application/x-navi-animation', '.aos': 'application/x-nokia-9000-communicator-add-on-software', '.aps': 'application/mime', '.arc': 'application/octet-stream', '.arj': 'application/arj', '.arj': 'application/octet-stream', '.art': 'image/x-jg', '.asf': 'video/x-ms-asf', '.asm': 'text/x-asm', '.asp': 'text/asp', '.asx': 'application/x-mplayer2', '.asx': 'video/x-ms-asf', '.asx': 'video/x-ms-asf-plugin', '.au': 'audio/basic', '.au': 'audio/x-au', '.avi': 'application/x-troff-msvideo', '.avi': 'video/avi', '.avi': 'video/msvideo', '.avi': 'video/x-msvideo', '.avs': 'video/avs-video', '.bcpio': 'application/x-bcpio', '.bin': 'application/mac-binary', '.bin': 'application/macbinary', '.bin': 'application/octet-stream', '.bin': 'application/x-binary', '.bin': 'application/x-macbinary', '.bm': 'image/bmp', '.bmp': 'image/bmp', '.bmp': 'image/x-windows-bmp', '.boo': 'application/book', '.book': 'application/book', '.boz': 'application/x-bzip2', '.bsh': 'application/x-bsh', '.bz': 'application/x-bzip', '.bz2': 'application/x-bzip2', '.c': 'text/plain', '.c': 'text/x-c', '.c++': 'text/plain', '.cat': 'application/vnd.ms-pki.seccat', '.cc': 'text/plain', '.cc': 'text/x-c', '.ccad': 'application/clariscad', '.cco': 'application/x-cocoa', '.cdf': 'application/cdf', '.cdf': 'application/x-cdf', '.cdf': 'application/x-netcdf', '.cer': 'application/pkix-cert', '.cer': 'application/x-x509-ca-cert', '.cha': 'application/x-chat', '.chat': 'application/x-chat', '.class': 'application/java', '.class': 'application/java-byte-code', '.class': 'application/x-java-class', '.com': 'application/octet-stream', '.com': 'text/plain', '.conf': 'text/plain', '.cpio': 'application/x-cpio', '.cpp': 'text/x-c', '.cpt': 'application/mac-compactpro', '.cpt': 'application/x-compactpro', '.cpt': 'application/x-cpt', '.crl': 'application/pkcs-crl', '.crl': 'application/pkix-crl', '.crt': 'application/pkix-cert', '.crt': 'application/x-x509-ca-cert', '.crt': 'application/x-x509-user-cert', '.csh': 'application/x-csh', '.csh': 'text/x-script.csh', '.css': 'application/x-pointplus', '.css': 'text/css', '.cxx': 'text/plain', '.dcr': 'application/x-director', '.deepv': 'application/x-deepv', '.def': 'text/plain', '.der': 'application/x-x509-ca-cert', '.dif': 'video/x-dv', '.dir': 'application/x-director', '.dl': 'video/dl', '.dl': 'video/x-dl', '.doc': 'application/msword', '.dot': 'application/msword', '.dp': 'application/commonground', '.drw': 'application/drafting', '.dump': 'application/octet-stream', '.dv': 'video/x-dv', '.dvi': 'application/x-dvi', '.dwf': 'drawing/x-dwf', '.dwf': 'model/vnd.dwf', '.dwg': 'application/acad', '.dwg': 'image/vnd.dwg', '.dwg': 'image/x-dwg', '.dxf': 'application/dxf', '.dxf': 'image/vnd.dwg', '.dxf': 'image/x-dwg', '.dxr': 'application/x-director', '.el': 'text/x-script.elisp', '.elc': 'application/x-bytecode.elisp', '.elc': 'application/x-elc', '.env': 'application/x-envoy', '.eps': 'application/postscript', '.es': 'application/x-esrehber', '.etx': 'text/x-setext', '.evy': 'application/envoy', '.evy': 'application/x-envoy', '.exe': 'application/octet-stream', '.f': 'text/plain', '.f': 'text/x-fortran', '.f77': 'text/x-fortran', '.f90': 'text/plain', '.f90': 'text/x-fortran', '.fdf': 'application/vnd.fdf', '.fif': 'application/fractals', '.fif': 'image/fif', '.fli': 'video/fli', '.fli': 'video/x-fli', '.flo': 'image/florian', '.flx': 'text/vnd.fmi.flexstor', '.fmf': 'video/x-atomic3d-feature', '.for': 'text/plain', '.for': 'text/x-fortran', '.fpx': 'image/vnd.fpx', '.fpx': 'image/vnd.net-fpx', '.frl': 'application/freeloader', '.funk': 'audio/make', '.g': 'text/plain', '.g3': 'image/g3fax', '.gif': 'image/gif', '.gl': 'video/gl', '.gl': 'video/x-gl', '.gsd': 'audio/x-gsm', '.gsm': 'audio/x-gsm', '.gsp': 'application/x-gsp', '.gss': 'application/x-gss', '.gtar': 'application/x-gtar', '.gz': 'application/x-compressed', '.gz': 'application/x-gzip', '.gzip': 'application/x-gzip', '.gzip': 'multipart/x-gzip', '.h': 'text/plain', '.h': 'text/x-h', '.hdf': 'application/x-hdf', '.help': 'application/x-helpfile', '.hgl': 'application/vnd.hp-hpgl', '.hh': 'text/plain', '.hh': 'text/x-h', '.hlb': 'text/x-script', '.hlp': 'application/hlp', '.hlp': 'application/x-helpfile', '.hlp': 'application/x-winhelp', '.hpg': 'application/vnd.hp-hpgl', '.hpgl': 'application/vnd.hp-hpgl', '.hqx': 'application/binhex', '.hqx': 'application/binhex4', '.hqx': 'application/mac-binhex', '.hqx': 'application/mac-binhex40', '.hqx': 'application/x-binhex40', '.hqx': 'application/x-mac-binhex40', '.hta': 'application/hta', '.htc': 'text/x-component', '.htm': 'text/html', '.html': 'text/html', '.htmls': 'text/html', '.htt': 'text/webviewhtml', '.htx': 'text/html', '.ice': 'x-conference/x-cooltalk', '.ico': 'image/x-icon', '.idc': 'text/plain', '.ief': 'image/ief', '.iefs': 'image/ief', '.iges': 'application/iges', '.iges': 'model/iges', '.igs': 'application/iges', '.igs': 'model/iges', '.ima': 'application/x-ima', '.imap': 'application/x-httpd-imap', '.inf': 'application/inf', '.ins': 'application/x-internett-signup', '.ip': 'application/x-ip2', '.isu': 'video/x-isvideo', '.it': 'audio/it', '.iv': 'application/x-inventor', '.ivr': 'i-world/i-vrml', '.ivy': 'application/x-livescreen', '.jam': 'audio/x-jam', '.jav': 'text/plain', '.jav': 'text/x-java-source', '.java': 'text/plain', '.java': 'text/x-java-source', '.jcm': 'application/x-java-commerce', '.jfif': 'image/jpeg', '.jfif-tbnl': 'image/jpeg', '.jpe': 'image/jpeg', '.jpeg': 'image/jpeg', '.jpg': 'image/jpeg', '.jps': 'image/x-jps', '.js': 'application/x-javascript', '.jut': 'image/jutvision', '.kar': 'audio/midi', '.kar': 'music/x-karaoke', '.ksh': 'application/x-ksh', '.ksh': 'text/x-script.ksh', '.la': 'audio/nspaudio', '.la': 'audio/x-nspaudio', '.lam': 'audio/x-liveaudio', '.latex': 'application/x-latex', '.lha': 'application/lha', '.lha': 'application/octet-stream', '.lha': 'application/x-lha', '.lhx': 'application/octet-stream', '.list': 'text/plain', '.lma': 'audio/nspaudio', '.lma': 'audio/x-nspaudio', '.log': 'text/plain', '.lsp': 'application/x-lisp', '.lsp': 'text/x-script.lisp', '.lst': 'text/plain', '.lsx': 'text/x-la-asf', '.ltx': 'application/x-latex', '.lzh': 'application/octet-stream', '.lzh': 'application/x-lzh', '.lzx': 'application/lzx', '.lzx': 'application/octet-stream', '.lzx': 'application/x-lzx', '.m': 'text/plain', '.m': 'text/x-m', '.m1v': 'video/mpeg', '.m2a': 'audio/mpeg', '.m2v': 'video/mpeg', '.m3u': 'audio/x-mpequrl', '.man': 'application/x-troff-man', '.map': 'application/x-navimap', '.mar': 'text/plain', '.mbd': 'application/mbedlet', '.mc$': 'application/x-magic-cap-package-1.0', '.mcd': 'application/mcad', '.mcd': 'application/x-mathcad', '.mcf': 'image/vasa', '.mcf': 'text/mcf', '.mcp': 'application/netmc', '.me': 'application/x-troff-me', '.mht': 'message/rfc822', '.mhtml': 'message/rfc822', '.mid': 'application/x-midi', '.mid': 'audio/midi', '.mid': 'audio/x-mid', '.mid': 'audio/x-midi', '.mid': 'music/crescendo', '.mid': 'x-music/x-midi', '.midi': 'application/x-midi', '.midi': 'audio/midi', '.midi': 'audio/x-mid', '.midi': 'audio/x-midi', '.midi': 'music/crescendo', '.midi': 'x-music/x-midi', '.mif': 'application/x-frame', '.mif': 'application/x-mif', '.mime': 'message/rfc822', '.mime': 'www/mime', '.mjf': 'audio/x-vnd.audioexplosion.mjuicemediafile', '.mjpg': 'video/x-motion-jpeg', '.mm': 'application/base64', '.mm': 'application/x-meme', '.mme': 'application/base64', '.mod': 'audio/mod', '.mod': 'audio/x-mod', '.moov': 'video/quicktime', '.mov': 'video/quicktime', '.movie': 'video/x-sgi-movie', '.mp2': 'audio/mpeg', '.mp2': 'audio/x-mpeg', '.mp2': 'video/mpeg', '.mp2': 'video/x-mpeg', '.mp2': 'video/x-mpeq2a', '.mp3': 'audio/mpeg3', '.mp3': 'audio/x-mpeg-3', '.mp3': 'video/mpeg', '.mp3': 'video/x-mpeg', '.mpa': 'audio/mpeg', '.mpa': 'video/mpeg', '.mpc': 'application/x-project', '.mpe': 'video/mpeg', '.mpeg': 'video/mpeg', '.mpg': 'audio/mpeg', '.mpg': 'video/mpeg', '.mpga': 'audio/mpeg', '.mpp': 'application/vnd.ms-project', '.mpt': 'application/x-project', '.mpv': 'application/x-project', '.mpx': 'application/x-project', '.mrc': 'application/marc', '.ms': 'application/x-troff-ms', '.mv': 'video/x-sgi-movie', '.my': 'audio/make', '.mzz': 'application/x-vnd.audioexplosion.mzz', '.nap': 'image/naplps', '.naplps': 'image/naplps', '.nc': 'application/x-netcdf', '.ncm': 'application/vnd.nokia.configuration-message', '.nif': 'image/x-niff', '.niff': 'image/x-niff', '.nix': 'application/x-mix-transfer', '.nsc': 'application/x-conference', '.nvd': 'application/x-navidoc', '.o': 'application/octet-stream', '.oda': 'application/oda', '.omc': 'application/x-omc', '.omcd': 'application/x-omcdatamaker', '.omcr': 'application/x-omcregerator', '.p': 'text/x-pascal', '.p10': 'application/pkcs10', '.p10': 'application/x-pkcs10', '.p12': 'application/pkcs-12', '.p12': 'application/x-pkcs12', '.p7a': 'application/x-pkcs7-signature', '.p7c': 'application/pkcs7-mime', '.p7c': 'application/x-pkcs7-mime', '.p7m': 'application/pkcs7-mime', '.p7m': 'application/x-pkcs7-mime', '.p7r': 'application/x-pkcs7-certreqresp', '.p7s': 'application/pkcs7-signature', '.part': 'application/pro_eng', '.pas': 'text/pascal', '.pbm': 'image/x-portable-bitmap', '.pcl': 'application/vnd.hp-pcl', '.pcl': 'application/x-pcl', '.pct': 'image/x-pict', '.pcx': 'image/x-pcx', '.pdb': 'chemical/x-pdb', '.pdf': 'application/pdf', '.pfunk': 'audio/make', '.pfunk': 'audio/make.my.funk', '.pgm': 'image/x-portable-graymap', '.pgm': 'image/x-portable-greymap', '.pic': 'image/pict', '.pict': 'image/pict', '.pkg': 'application/x-newton-compatible-pkg', '.pko': 'application/vnd.ms-pki.pko', '.pl': 'text/plain', '.pl': 'text/x-script.perl', '.plx': 'application/x-pixclscript', '.pm': 'image/x-xpixmap', '.pm': 'text/x-script.perl-module', '.pm4': 'application/x-pagemaker', '.pm5': 'application/x-pagemaker', '.png': 'image/png', '.pnm': 'application/x-portable-anymap', '.pnm': 'image/x-portable-anymap', '.pot': 'application/mspowerpoint', '.pot': 'application/vnd.ms-powerpoint', '.pov': 'model/x-pov', '.ppa': 'application/vnd.ms-powerpoint', '.ppm': 'image/x-portable-pixmap', '.pps': 'application/mspowerpoint', '.pps': 'application/vnd.ms-powerpoint', '.ppt': 'application/mspowerpoint', '.ppt': 'application/powerpoint', '.ppt': 'application/vnd.ms-powerpoint', '.ppt': 'application/x-mspowerpoint', '.ppz': 'application/mspowerpoint', '.pre': 'application/x-freelance', '.prt': 'application/pro_eng', '.ps': 'application/postscript', '.psd': 'application/octet-stream', '.pvu': 'paleovu/x-pv', '.pwz': 'application/vnd.ms-powerpoint', '.py': 'text/x-script.phyton', '.pyc': 'applicaiton/x-bytecode.python', '.qcp': 'audio/vnd.qcelp', '.qd3': 'x-world/x-3dmf', '.qd3d': 'x-world/x-3dmf', '.qif': 'image/x-quicktime', '.qt': 'video/quicktime', '.qtc': 'video/x-qtc', '.qti': 'image/x-quicktime', '.qtif': 'image/x-quicktime', '.ra': 'audio/x-pn-realaudio', '.ra': 'audio/x-pn-realaudio-plugin', '.ra': 'audio/x-realaudio', '.ram': 'audio/x-pn-realaudio', '.ras': 'application/x-cmu-raster', '.ras': 'image/cmu-raster', '.ras': 'image/x-cmu-raster', '.rast': 'image/cmu-raster', '.rexx': 'text/x-script.rexx', '.rf': 'image/vnd.rn-realflash', '.rgb': 'image/x-rgb', '.rm': 'application/vnd.rn-realmedia', '.rm': 'audio/x-pn-realaudio', '.rmi': 'audio/mid', '.rmm': 'audio/x-pn-realaudio', '.rmp': 'audio/x-pn-realaudio', '.rmp': 'audio/x-pn-realaudio-plugin', '.rng': 'application/ringing-tones', '.rng': 'application/vnd.nokia.ringing-tone', '.rnx': 'application/vnd.rn-realplayer', '.roff': 'application/x-troff', '.rp': 'image/vnd.rn-realpix', '.rpm': 'audio/x-pn-realaudio-plugin', '.rt': 'text/richtext', '.rt': 'text/vnd.rn-realtext', '.rtf': 'application/rtf', '.rtf': 'application/x-rtf', '.rtf': 'text/richtext', '.rtx': 'application/rtf', '.rtx': 'text/richtext', '.rv': 'video/vnd.rn-realvideo', '.s': 'text/x-asm', '.s3m': 'audio/s3m', '.saveme': 'application/octet-stream', '.sbk': 'application/x-tbook', '.scm': 'application/x-lotusscreencam', '.scm': 'text/x-script.guile', '.scm': 'text/x-script.scheme', '.scm': 'video/x-scm', '.sdml': 'text/plain', '.sdp': 'application/sdp', '.sdp': 'application/x-sdp', '.sdr': 'application/sounder', '.sea': 'application/sea', '.sea': 'application/x-sea', '.set': 'application/set', '.sgm': 'text/sgml', '.sgm': 'text/x-sgml', '.sgml': 'text/sgml', '.sgml': 'text/x-sgml', '.sh': 'application/x-bsh', '.sh': 'application/x-sh', '.sh': 'application/x-shar', '.sh': 'text/x-script.sh', '.shar': 'application/x-bsh', '.shar': 'application/x-shar', '.shtml': 'text/html', '.shtml': 'text/x-server-parsed-html', '.sid': 'audio/x-psid', '.sit': 'application/x-sit', '.sit': 'application/x-stuffit', '.skd': 'application/x-koan', '.skm': 'application/x-koan', '.skp': 'application/x-koan', '.skt': 'application/x-koan', '.sl': 'application/x-seelogo', '.smi': 'application/smil', '.smil': 'application/smil', '.snd': 'audio/basic', '.snd': 'audio/x-adpcm', '.sol': 'application/solids', '.spc': 'application/x-pkcs7-certificates', '.spc': 'text/x-speech', '.spl': 'application/futuresplash', '.spr': 'application/x-sprite', '.sprite': 'application/x-sprite', '.src': 'application/x-wais-source', '.ssi': 'text/x-server-parsed-html', '.ssm': 'application/streamingmedia', '.sst': 'application/vnd.ms-pki.certstore', '.step': 'application/step', '.stl': 'application/sla', '.stl': 'application/vnd.ms-pki.stl', '.stl': 'application/x-navistyle', '.stp': 'application/step', '.sv4cpio': 'application/x-sv4cpio', '.sv4crc': 'application/x-sv4crc', '.svf': 'image/vnd.dwg', '.svf': 'image/x-dwg', '.svr': 'application/x-world', '.svr': 'x-world/x-svr', '.swf': 'application/x-shockwave-flash', '.t': 'application/x-troff', '.talk': 'text/x-speech', '.tar': 'application/x-tar', '.tbk': 'application/toolbook', '.tbk': 'application/x-tbook', '.tcl': 'application/x-tcl', '.tcl': 'text/x-script.tcl', '.tcsh': 'text/x-script.tcsh', '.tex': 'application/x-tex', '.texi': 'application/x-texinfo', '.texinfo': 'application/x-texinfo', '.text': 'application/plain', '.text': 'text/plain', '.tgz': 'application/gnutar', '.tgz': 'application/x-compressed', '.tif': 'image/tiff', '.tif': 'image/x-tiff', '.tiff': 'image/tiff', '.tiff': 'image/x-tiff', '.tr': 'application/x-troff', '.tsi': 'audio/tsp-audio', '.tsp': 'application/dsptype', '.tsp': 'audio/tsplayer', '.tsv': 'text/tab-separated-values', '.turbot': 'image/florian', '.txt': 'text/plain', '.uil': 'text/x-uil', '.uni': 'text/uri-list', '.unis': 'text/uri-list', '.unv': 'application/i-deas', '.uri': 'text/uri-list', '.uris': 'text/uri-list', '.ustar': 'application/x-ustar', '.ustar': 'multipart/x-ustar', '.uu': 'application/octet-stream', '.uu': 'text/x-uuencode', '.uue': 'text/x-uuencode', '.vcd': 'application/x-cdlink', '.vcs': 'text/x-vcalendar', '.vda': 'application/vda', '.vdo': 'video/vdo', '.vew': 'application/groupwise', '.viv': 'video/vivo', '.viv': 'video/vnd.vivov', '.vivo': 'video/vivo', '.vivo': 'video/vnd.vivo', '.vmd': 'application/vocaltec-media-desc', '.vmf': 'application/vocaltec-media-file', '.voc': 'audio/voc', '.voc': 'audio/x-voc', '.vos': 'video/vosaic', '.vox': 'audio/voxware', '.vqe': 'audio/x-twinvq-plugin', '.vqf': 'audio/x-twinvq', '.vql': 'audio/x-twinvq-plugin', '.vrml': 'application/x-vrml', '.vrml': 'model/vrml', '.vrml': 'x-world/x-vrml', '.vrt': 'x-world/x-vrt', '.vsd': 'application/x-visio', '.vst': 'application/x-visio', '.vsw': 'application/x-visio', '.w60': 'application/wordperfect6.0', '.w61': 'application/wordperfect6.1', '.w6w': 'application/msword', '.wav': 'audio/wav', '.wav': 'audio/x-wav', '.wb1': 'application/x-qpro', '.wbmp': 'image/vnd.wap.wbmp', '.web': 'application/vnd.xara', '.wiz': 'application/msword', '.wk1': 'application/x-123', '.wmf': 'windows/metafile', '.wml': 'text/vnd.wap.wml', '.wmlc': 'application/vnd.wap.wmlc', '.wmls': 'text/vnd.wap.wmlscript', '.wmlsc': 'application/vnd.wap.wmlscriptc', '.word': 'application/msword', '.wp': 'application/wordperfect', '.wp5': 'application/wordperfect', '.wp5': 'application/wordperfect6.0', '.wp6': 'application/wordperfect', '.wpd': 'application/wordperfect', '.wpd': 'application/x-wpwin', '.wq1': 'application/x-lotus', '.wri': 'application/mswrite', '.wri': 'application/x-wri', '.wrl': 'application/x-world', '.wrl': 'model/vrml', '.wrl': 'x-world/x-vrml', '.wrz': 'model/vrml', '.wrz': 'x-world/x-vrml', '.wsc': 'text/scriplet', '.wsrc': 'application/x-wais-source', '.wtk': 'application/x-wintalk', '.xbm': 'image/x-xbitmap', '.xbm': 'image/x-xbm', '.xbm': 'image/xbm', '.xdr': 'video/x-amt-demorun', '.xgz': 'xgl/drawing', '.xif': 'image/vnd.xiff', '.xl': 'application/excel', '.xla': 'application/excel', '.xla': 'application/x-excel', '.xla': 'application/x-msexcel', '.xlb': 'application/excel', '.xlb': 'application/vnd.ms-excel', '.xlb': 'application/x-excel', '.xlc': 'application/excel', '.xlc': 'application/vnd.ms-excel', '.xlc': 'application/x-excel', '.xld': 'application/excel', '.xld': 'application/x-excel', '.xlk': 'application/excel', '.xlk': 'application/x-excel', '.xll': 'application/excel', '.xll': 'application/vnd.ms-excel', '.xll': 'application/x-excel', '.xlm': 'application/excel', '.xlm': 'application/vnd.ms-excel', '.xlm': 'application/x-excel', '.xls': 'application/excel', '.xls': 'application/vnd.ms-excel', '.xls': 'application/x-excel', '.xls': 'application/x-msexcel', '.xlt': 'application/excel', '.xlt': 'application/x-excel', '.xlv': 'application/excel', '.xlv': 'application/x-excel', '.xlw': 'application/excel', '.xlw': 'application/vnd.ms-excel', '.xlw': 'application/x-excel', '.xlw': 'application/x-msexcel', '.xm': 'audio/xm', '.xml': 'application/xml', '.xml': 'text/xml', '.xmz': 'xgl/movie', '.xpix': 'application/x-vnd.ls-xpix', '.xpm': 'image/x-xpixmap', '.xpm': 'image/xpm', '.x-png': 'image/png', '.xsr': 'video/x-amt-showrun', '.xwd': 'image/x-xwd', '.xwd': 'image/x-xwindowdump', '.xyz': 'chemical/x-pdb', '.z': 'application/x-compress', '.z': 'application/x-compressed', '.zip': 'application/x-compressed', '.zip': 'application/x-zip-compressed', '.zip': 'application/zip', '.zip': 'multipart/x-zip', '.zoo': 'application/octet-stream', '.zsh': 'text/x-script.zsh', }; const i = fileName.lastIndexOf('.'); let ext = ''; if (i > 0) { ext = fileName.substr(i); } let mime = mimeTypes[ext]; if (mime == null) { mime = 'application/octet-stream'; } return mime; } module.exports = mimeType;