Implementation
Map<String, String> mimeTypes = {
'.aac': 'audio/aac',
'.abw': 'application/x-abiword',
'.arc': 'application/x-freearc',
'.avi': 'video/x-msvideo',
'.azw': 'application/vnd.amazon.ebook',
'.bin': 'application/octet-stream',
'.bmp': 'image/bmp',
'.bz': 'application/x-bzip',
'.bz2': 'application/x-bzip2',
'.csh': 'application/x-csh',
'.css': 'text/css',
'.csv': 'text/csv',
'.doc': 'application/msword',
'.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
'.eot': 'application/vnd.ms-fontobject',
'.epub': 'application/epub+zip',
'.gz': 'application/gzip',
'.gif': 'image/gif',
'.htm': 'text/html',
'.html': 'text/html',
'.ico': 'image/vnd.microsoft.icon',
'.ics': 'text/calendar',
'.jar': 'application/java-archive',
'.jpeg': 'image/jpeg',
'.jpg': 'image/jpeg',
'.js': 'text/javascript',
'.json': 'application/json',
'.jsonld': 'application/ld+json',
'.mid': 'audio/midi',
'.midi': 'audio/midi',
'.mjs': 'text/javascript',
'.mp3': 'audio/mpeg',
'.mpeg': 'video/mpeg',
'.mpkg': 'application/vnd.apple.installer+xml',
'.odp': 'application/vnd.oasis.opendocument.presentation',
'.ods': 'application/vnd.oasis.opendocument.spreadsheet',
'.odt': 'application/vnd.oasis.opendocument.text',
'.oga': 'audio/ogg',
'.ogv': 'video/ogg',
'.ogx': 'application/ogg',
'.otf': 'font/otf',
'.png': 'image/png',
'.pdf': 'application/pdf',
'.ppt': 'application/vnd.ms-powerpoint',
'.pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
'.rar': 'application/vnd.rar',
'.rtf': 'application/rtf',
'.sh': 'application/x-sh',
'.svg': 'image/svg+xml',
'.swf': 'application/x-shockwave-flash',
'.tar': 'application/x-tar',
'.tif': 'image/tiff',
'.tiff': 'image/tiff',
'.ts': 'video/mp2t',
'.ttf': 'font/ttf',
'.txt': 'text/plain',
'.vsd': 'application/vnd.visio',
'.wav': 'audio/wav',
'.weba': 'audio/webm',
'.webm': 'video/webm',
'.webp': 'image/webp',
'.woff': 'font/woff',
'.woff2': 'font/woff2',
'.xhtml': 'application/xhtml+xml',
'.xls': 'application/vnd.ms-excel',
'.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
'.xml': 'application/xml',
'.xul': 'application/vnd.mozilla.xul+xml',
'.zip': 'application/zip',
'.3gp': 'video/3gpp',
'.3g2': 'video/3gpp2',
'.7z': 'application/x-7z-compressed',
'.mp4': 'video/mp4',
'.mkv': 'video/x-matroska',
'.flv': 'video/x-flv',
'.mov': 'video/quicktime',
'.wmv': 'video/x-ms-wmv',
'.m4a': 'audio/mp4',
'.flac': 'audio/flac',
'.ogg': 'audio/ogg',
'.dmg': 'application/x-apple-diskimage',
'.iso': 'application/x-iso9660-image',
'.dxf': 'image/vnd.dxf',
'.dwg': 'image/vnd.dwg',
'.ai': 'application/postscript',
'.indd': 'application/x-indesign',
'.apk': 'application/vnd.android.package-archive',
'.srt': 'application/x-subrip',
'.vtt': 'text/vtt',
'.cr2': 'image/x-canon-cr2',
'.nef': 'image/x-nikon-nef',
'.raw': 'image/x-raw',
'.heif': 'image/heif',
'.heic': 'image/heic',
'.m4v': 'video/x-m4v',
'.hevc': 'video/hevc',
'.m2ts': 'video/mp2t',
'.rmvb': 'application/vnd.rn-realmedia-vbr',
'.mts': 'model/vnd.mts',
'.psd': 'image/vnd.adobe.photoshop',
'.sql': 'application/sql',
'.nq': 'application/n-quads',
'.nt': 'application/n-triples',
'.ttl': 'text/turtle',
'.sparql': 'application/sparql-query',
'.rdf': 'application/rdf+xml',
'.rss': 'application/rss+xml',
'.atom': 'application/atom+xml',
'.yaml': 'text/yaml',
'.yml': 'text/yaml',
'.jad': 'text/vnd.sun.j2me.app-descriptor',
'.wml': 'text/vnd.wap.wml',
'.wmls': 'text/vnd.wap.wmlscript',
'.vcard': 'text/vcard',
'.shtml': 'text/html',
'.markdown': 'text/markdown',
'.md': 'text/markdown',
'.mml': 'text/mathml',
'.dsc': 'text/prs.lines.tag',
'.rtx': 'text/richtext',
'.sgml': 'text/sgml',
'.tsv': 'text/tab-separated-values',
'.t': 'text/troff',
'.man': 'text/troff',
'.me': 'text/troff',
'.ms': 'text/troff',
'.uri': 'text/uri-list',
'.uris': 'text/uri-list',
'.urls': 'text/uri-list',
'.vcs': 'text/x-vcalendar',
'.vcf': 'text/x-vcard',
'.h261': 'video/h261',
'.h263': 'video/h263',
'.h264': 'video/h264',
'.jpgv': 'video/jpeg',
'.jpm': 'video/jpm',
'.jpgm': 'video/jpm',
'.mj2': 'video/mj2',
'.mjp2': 'video/mj2',
'.mp4v': 'video/mp4',
'.mpg4': 'video/mp4',
'.mpg': 'video/mpeg',
'.mpe': 'video/mpeg',
'.m1v': 'video/mpeg',
'.m2v': 'video/mpeg',
'.qt': 'video/quicktime',
'.uvh': 'video/vnd.dece.hd',
'.uvvh': 'video/vnd.dece.hd',
'.uvm': 'video/vnd.dece.mobile',
'.uvvm': 'video/vnd.dece.mobile',
'.uvp': 'video/vnd.dece.pd',
'.uvvp': 'video/vnd.dece.pd',
'.uvs': 'video/vnd.dece.sd',
'.uvvs': 'video/vnd.dece.sd',
'.uvv': 'video/vnd.dece.video',
'.uvvv': 'video/vnd.dece.video',
'.dvb': 'video/vnd.dvb.file',
'.fvt': 'video/vnd.fvt',
'.mxu': 'video/vnd.mpegurl',
'.m4u': 'video/vnd.mpegurl',
'.pyv': 'video/vnd.ms-playready.media.pyv',
'.uvu': 'video/vnd.uvvu.mp4',
'.uvvu': 'video/vnd.uvvu.mp4',
'.viv': 'video/vnd.vivo',
'.f4v': 'video/x-f4v',
'.fli': 'video/x-fli',
'.mk3d': 'video/x-matroska',
'.mks': 'video/x-matroska',
'.mng': 'video/x-mng',
'.asf': 'video/x-ms-asf',
'.asx': 'video/x-ms-asf',
'.vob': 'video/x-ms-vob',
'.wm': 'video/x-ms-wm',
'.wmx': 'video/x-ms-wmx',
'.wvx': 'video/x-ms-wvx',
'.movie': 'video/x-sgi-movie',
'.smv': 'video/x-smv',
'.ice': 'x-conference/x-cooltalk',
};