Skip to content

Erraten des MIME-Typs aus Dateinamen/URL mit mimetypes in Python

Python

In Python can SIE den MIME-Typ (Medientyp) basierend auf einer Dateinamen-/URL-Erweiterung erraten oder die Erweiterung basierend auf dem MIME-Typ mit den Mimetypen der Standardbibliothek erraten.

Dieser Artikel hat folgenden Inhalt.

Ein MIME-Typ ist eine zweiteilige Kennung für Dateiformate und Formatinhalte.

Verwenden Sie sterben Funktion believe_type(), um den MIME-Typ basierend auf Einem Dateinamen oder Einer URL zu erraten. Ein Tupel von (Typ, Kodierung) wird zurückgegeben.

import mimetypes

print(mimetypes.guess_type('test.jpg'))
# ('image/jpeg', None)

print(type(mimetypes.guess_type('test.jpg')))
# <class 'tuple'>

print(mimetypes.guess_type('test.jpg')[0])
# image/jpeg

print(type(mimetypes.guess_type('test.jpg')[0]))
# <class 'str'>

Das erste Element des Tupels, Typ, ist der MIME-Typ. Das zweite Element, encoding, ist ein Wert, wenn die Datei beispielsweise mit gzip komprimiert ist. Anders ist es keine.

print(mimetypes.guess_type('test.tar.gz'))
# ('application/x-tar', 'gzip')

SIE can Eine Pfadzeichenfolge angeben, sterben Ein Verzeichnis Oder Eine URL enthält. Es wird nur anhand der Erweiterung aufgestellt und nicht den Inhalt der Datei überprüft.

print(mimetypes.guess_type('dir/test.txt'))
# ('text/plain', None)

print(mimetypes.guess_type('https://example.com/test.html'))
# ('text/html', None)

Großbuchstaben sind zulässig.

print(mimetypes.guess_type('test.JPG'))
# ('image/jpeg', None)

Verwenden Sie believe_all_extensions() und believe_extension(), um Erweiterungen basierend auf dem MIME-Typ zu erraten.

believe_all_extensions() gibt eine Liste zurück, und believe_extension() gibt das erste Element in dieser Liste zurück.

print(mimetypes.guess_all_extensions('image/jpeg'))
# ['.jpe', '.jpeg', '.jpg']

print(mimetypes.guess_extension('image/jpeg'))
# .jpe

print(mimetypes.guess_all_extensions('text/plain'))
# ['.bat', '.c', '.h', '.ksh', '.pl', '.txt', '.text', '.conf', '.def', '.list', '.log', '.in']

print(mimetypes.guess_extension('text/plain'))
# .bat

Wie SIE dem Beispielcode entnehmen können, gibt believe_extension() nur das erste Element in alphabetischer Reihenfolge zurück, kein besonders repräsentatives.

If ein nicht vorhandener MIME-Typ angegeben WIRD, Werden Eine leere Liste und None zurückgegeben. Natürlich ist es nicht erlaubt, wenn es auch nur geringfügig anders ist.

print(mimetypes.guess_all_extensions('image/jpg'))
# []

print(mimetypes.guess_extension('image/jpg'))
# None

Das Attribut types_map enthält ein Wörterbuch, dessen Schlüsselerweiterungen und dessen Werte MIME-Typen sind.

Das mimetypes-Modul stellt init() bereit, um types_map zu initialisieren. Wenn eine Funktion wie etwa rate_type() aufgerufen WIRD, WIRD init() automatisch ausgeführt und types_map WIRD durch die Standarddatei des Systems aktualisiert. Andernfalls enthält die types_map nur die eingebauten Werte.

Ob init() ausgeführt wurde oder nicht, kann durch das inited-Attribut überprüft werden.

if not mimetypes.inited:
    mimetypes.init()

print(type(mimetypes.types_map))
# <class 'dict'>

print(len(mimetypes.types_map))
# 1013

print(mimetypes.types_map['.jpg'])
# image/jpeg

Dieses Ergebnis wurde auf macOS Mojave ausgeführt und das Wörterbuch enthält 1013 Elemente. Unter Windows 10 betrug die Anzahl der Elemente 272 und unter Ubuntu 18.04 564.

Beachten Sie, dass die in types_map übereinstimmenden Erweiterungen und MIME-Typen je nach Umgebung unterschiedlich sind. Beispielsweise war Markdown (.md/text/markdown) nur in Ubuntu in meiner Umgebung enthalten. Auch Funktionen wie etwa rate_type() werden auf der Grundlage von types_map verarbeitet, sodass die Ergebnisse abweichen können.

Sie können eine Liste der Erweiterungen und ihrer MIME-Typen anzeigen, ohne dass Sie types_map drucken. Hier wird Druck verwendet, um es besser sichtbar zu machen.

pprint.pprint(mimetypes.types_map)
# {'.123': 'application/vnd.lotus-1-2-3',
#  '.3dml': 'text/vnd.in3d.3dml',
#  '.3ds': 'image/x-3ds',
#  '.3g2': 'video/3gpp2',
#  '.3gp': 'video/3gpp',
#  '.7z': 'application/x-7z-compressed',
#  '.a': 'application/octet-stream',
#  '.aab': 'application/x-authorware-bin',
#  '.aac': 'audio/x-aac',
#  '.aam': 'application/x-authorware-map',
#  '.aas': 'application/x-authorware-seg',
#  '.abw': 'application/x-abiword',
#  '.ac': 'application/pkix-attr-cert',
#  '.acc': 'application/vnd.americandynamics.acc',
#  '.ace': 'application/x-ace-compressed',
#  '.acu': 'application/vnd.acucobol',
#  '.acutc': 'application/vnd.acucorp',
#  '.adp': 'audio/adpcm',
#  '.aep': 'application/vnd.audiograph',
#  '.afm': 'application/x-font-type1',
#  '.afp': 'application/vnd.ibm.modcap',
#  '.ahead': 'application/vnd.ahead.space',
#  '.ai': 'application/postscript',
#  '.aif': 'audio/x-aiff',
#  '.aifc': 'audio/x-aiff',
#  '.aiff': 'audio/x-aiff',
#  '.air': 'application/vnd.adobe.air-application-installer-package+zip',
#  '.ait': 'application/vnd.dvb.ait',
#  '.ami': 'application/vnd.amiga.ami',
#  '.apk': 'application/vnd.android.package-archive',
#  '.appcache': 'text/cache-manifest',
#  '.application': 'application/x-ms-application',
#  '.apr': 'application/vnd.lotus-approach',
#  '.arc': 'application/x-freearc',
#  '.asc': 'application/pgp-signature',
#  '.asf': 'video/x-ms-asf',
#  '.asm': 'text/x-asm',
#  '.aso': 'application/vnd.accpac.simply.aso',
#  '.asx': 'video/x-ms-asf',
#  '.atc': 'application/vnd.acucorp',
#  '.atom': 'application/atom+xml',
#  '.atomcat': 'application/atomcat+xml',
#  '.atomsvc': 'application/atomsvc+xml',
#  '.atx': 'application/vnd.antix.game-component',
#  '.au': 'audio/basic',
#  '.avi': 'video/x-msvideo',
#  '.aw': 'application/applixware',
#  '.azf': 'application/vnd.airzip.filesecure.azf',
#  '.azs': 'application/vnd.airzip.filesecure.azs',
#  '.azw': 'application/vnd.amazon.ebook',
#  '.bat': 'application/x-msdownload',
#  '.bcpio': 'application/x-bcpio',
#  '.bdf': 'application/x-font-bdf',
#  '.bdm': 'application/vnd.syncml.dm+wbxml',
#  '.bed': 'application/vnd.realvnc.bed',
#  '.bh2': 'application/vnd.fujitsu.oasysprs',
#  '.bin': 'application/octet-stream',
#  '.blb': 'application/x-blorb',
#  '.blorb': 'application/x-blorb',
#  '.bmi': 'application/vnd.bmi',
#  '.bmp': 'image/bmp',
#  '.book': 'application/vnd.framemaker',
#  '.box': 'application/vnd.previewsystems.box',
#  '.boz': 'application/x-bzip2',
#  '.bpk': 'application/octet-stream',
#  '.btif': 'image/prs.btif',
#  '.bz': 'application/x-bzip',
#  '.bz2': 'application/x-bzip2',
#  '.c': 'text/x-c',
#  '.c11amc': 'application/vnd.cluetrust.cartomobile-config',
#  '.c11amz': 'application/vnd.cluetrust.cartomobile-config-pkg',
#  '.c4d': 'application/vnd.clonk.c4group',
#  '.c4f': 'application/vnd.clonk.c4group',
#  '.c4g': 'application/vnd.clonk.c4group',
#  '.c4p': 'application/vnd.clonk.c4group',
#  '.c4u': 'application/vnd.clonk.c4group',
#  '.cab': 'application/vnd.ms-cab-compressed',
#  '.caf': 'audio/x-caf',
#  '.cap': 'application/vnd.tcpdump.pcap',
#  '.car': 'application/vnd.curl.car',
#  '.cat': 'application/vnd.ms-pki.seccat',
#  '.cb7': 'application/x-cbr',
#  '.cba': 'application/x-cbr',
#  '.cbr': 'application/x-cbr',
#  '.cbt': 'application/x-cbr',
#  '.cbz': 'application/x-cbr',
#  '.cc': 'text/x-c',
#  '.cct': 'application/x-director',
#  '.ccxml': 'application/ccxml+xml',
#  '.cdbcmsg': 'application/vnd.contact.cmsg',
#  '.cdf': 'application/x-netcdf',
#  '.cdkey': 'application/vnd.mediastation.cdkey',
#  '.cdmia': 'application/cdmi-capability',
#  '.cdmic': 'application/cdmi-container',
#  '.cdmid': 'application/cdmi-domain',
#  '.cdmio': 'application/cdmi-object',
#  '.cdmiq': 'application/cdmi-queue',
#  '.cdx': 'chemical/x-cdx',
#  '.cdxml': 'application/vnd.chemdraw+xml',
#  '.cdy': 'application/vnd.cinderella',
#  '.cer': 'application/pkix-cert',
#  '.cfs': 'application/x-cfs-compressed',
#  '.cgm': 'image/cgm',
#  '.chat': 'application/x-chat',
#  '.chm': 'application/vnd.ms-htmlhelp',
#  '.chrt': 'application/vnd.kde.kchart',
#  '.cif': 'chemical/x-cif',
#  '.cii': 'application/vnd.anser-web-certificate-issue-initiation',
#  '.cil': 'application/vnd.ms-artgalry',
#  '.cla': 'application/vnd.claymore',
#  '.class': 'application/java-vm',
#  '.clkk': 'application/vnd.crick.clicker.keyboard',
#  '.clkp': 'application/vnd.crick.clicker.palette',
#  '.clkt': 'application/vnd.crick.clicker.template',
#  '.clkw': 'application/vnd.crick.clicker.wordbank',
#  '.clkx': 'application/vnd.crick.clicker',
#  '.clp': 'application/x-msclip',
#  '.cmc': 'application/vnd.cosmocaller',
#  '.cmdf': 'chemical/x-cmdf',
#  '.cml': 'chemical/x-cml',
#  '.cmp': 'application/vnd.yellowriver-custom-menu',
#  '.cmx': 'image/x-cmx',
#  '.cod': 'application/vnd.rim.cod',
#  '.com': 'application/x-msdownload',
#  '.conf': 'text/plain',
#  '.cpio': 'application/x-cpio',
#  '.cpp': 'text/x-c',
#  '.cpt': 'application/mac-compactpro',
#  '.crd': 'application/x-mscardfile',
#  '.crl': 'application/pkix-crl',
#  '.crt': 'application/x-x509-ca-cert',
#  '.cryptonote': 'application/vnd.rig.cryptonote',
#  '.csh': 'application/x-csh',
#  '.csml': 'chemical/x-csml',
#  '.csp': 'application/vnd.commonspace',
#  '.css': 'text/css',
#  '.cst': 'application/x-director',
#  '.csv': 'text/csv',
#  '.cu': 'application/cu-seeme',
#  '.curl': 'text/vnd.curl',
#  '.cww': 'application/prs.cww',
#  '.cxt': 'application/x-director',
#  '.cxx': 'text/x-c',
#  '.dae': 'model/vnd.collada+xml',
#  '.daf': 'application/vnd.mobius.daf',
#  '.dart': 'application/vnd.dart',
#  '.dataless': 'application/vnd.fdsn.seed',
#  '.davmount': 'application/davmount+xml',
#  '.dbk': 'application/docbook+xml',
#  '.dcr': 'application/x-director',
#  '.dcurl': 'text/vnd.curl.dcurl',
#  '.dd2': 'application/vnd.oma.dd2+xml',
#  '.ddd': 'application/vnd.fujixerox.ddd',
#  '.deb': 'application/x-debian-package',
#  '.def': 'text/plain',
#  '.deploy': 'application/octet-stream',
#  '.der': 'application/x-x509-ca-cert',
#  '.dfac': 'application/vnd.dreamfactory',
#  '.dgc': 'application/x-dgc-compressed',
#  '.dic': 'text/x-c',
#  '.dif': 'video/x-dv',
#  '.dir': 'application/x-director',
#  '.dis': 'application/vnd.mobius.dis',
#  '.dist': 'application/octet-stream',
#  '.distz': 'application/octet-stream',
#  '.djv': 'image/vnd.djvu',
#  '.djvu': 'image/vnd.djvu',
#  '.dll': 'application/x-msdownload',
#  '.dmg': 'application/x-apple-diskimage',
#  '.dmp': 'application/vnd.tcpdump.pcap',
#  '.dms': 'application/octet-stream',
#  '.dna': 'application/vnd.dna',
#  '.doc': 'application/msword',
#  '.docm': 'application/vnd.ms-word.document.macroenabled.12',
#  '.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
#  '.dot': 'application/msword',
#  '.dotm': 'application/vnd.ms-word.template.macroenabled.12',
#  '.dotx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
#  '.dp': 'application/vnd.osgi.dp',
#  '.dpg': 'application/vnd.dpgraph',
#  '.dra': 'audio/vnd.dra',
#  '.dsc': 'text/prs.lines.tag',
#  '.dssc': 'application/dssc+der',
#  '.dtb': 'application/x-dtbook+xml',
#  '.dtd': 'application/xml-dtd',
#  '.dts': 'audio/vnd.dts',
#  '.dtshd': 'audio/vnd.dts.hd',
#  '.dump': 'application/octet-stream',
#  '.dv': 'video/x-dv',
#  '.dvb': 'video/vnd.dvb.file',
#  '.dvi': 'application/x-dvi',
#  '.dwf': 'model/vnd.dwf',
#  '.dwg': 'image/vnd.dwg',
#  '.dxf': 'image/vnd.dxf',
#  '.dxp': 'application/vnd.spotfire.dxp',
#  '.dxr': 'application/x-director',
#  '.ecelp4800': 'audio/vnd.nuera.ecelp4800',
#  '.ecelp7470': 'audio/vnd.nuera.ecelp7470',
#  '.ecelp9600': 'audio/vnd.nuera.ecelp9600',
#  '.ecma': 'application/ecmascript',
#  '.edm': 'application/vnd.novadigm.edm',
#  '.edx': 'application/vnd.novadigm.edx',
#  '.efif': 'application/vnd.picsel',
#  '.ei6': 'application/vnd.pg.osasli',
#  '.elc': 'application/octet-stream',
#  '.emf': 'application/x-msmetafile',
#  '.eml': 'message/rfc822',
#  '.emma': 'application/emma+xml',
#  '.emz': 'application/x-msmetafile',
#  '.eol': 'audio/vnd.digital-winds',
#  '.eot': 'application/vnd.ms-fontobject',
#  '.eps': 'application/postscript',
#  '.epub': 'application/epub+zip',
#  '.es3': 'application/vnd.eszigno3+xml',
#  '.esa': 'application/vnd.osgi.subsystem',
#  '.esf': 'application/vnd.epson.esf',
#  '.et3': 'application/vnd.eszigno3+xml',
#  '.etx': 'text/x-setext',
#  '.eva': 'application/x-eva',
#  '.evy': 'application/x-envoy',
#  '.exe': 'application/x-msdownload',
#  '.exi': 'application/exi',
#  '.ext': 'application/vnd.novadigm.ext',
#  '.ez': 'application/andrew-inset',
#  '.ez2': 'application/vnd.ezpix-album',
#  '.ez3': 'application/vnd.ezpix-package',
#  '.f': 'text/x-fortran',
#  '.f4v': 'video/x-f4v',
#  '.f77': 'text/x-fortran',
#  '.f90': 'text/x-fortran',
#  '.fbs': 'image/vnd.fastbidsheet',
#  '.fcdt': 'application/vnd.adobe.formscentral.fcdt',
#  '.fcs': 'application/vnd.isac.fcs',
#  '.fdf': 'application/vnd.fdf',
#  '.fe_launch': 'application/vnd.denovo.fcselayout-link',
#  '.fg5': 'application/vnd.fujitsu.oasysgp',
#  '.fgd': 'application/x-director',
#  '.fh': 'image/x-freehand',
#  '.fh4': 'image/x-freehand',
#  '.fh5': 'image/x-freehand',
#  '.fh7': 'image/x-freehand',
#  '.fhc': 'image/x-freehand',
#  '.fig': 'application/x-xfig',
#  '.flac': 'audio/x-flac',
#  '.fli': 'video/x-fli',
#  '.flo': 'application/vnd.micrografx.flo',
#  '.flv': 'video/x-flv',
#  '.flw': 'application/vnd.kde.kivio',
#  '.flx': 'text/vnd.fmi.flexstor',
#  '.fly': 'text/vnd.fly',
#  '.fm': 'application/vnd.framemaker',
#  '.fnc': 'application/vnd.frogans.fnc',
#  '.for': 'text/x-fortran',
#  '.fpx': 'image/vnd.fpx',
#  '.frame': 'application/vnd.framemaker',
#  '.fsc': 'application/vnd.fsc.weblaunch',
#  '.fst': 'image/vnd.fst',
#  '.ftc': 'application/vnd.fluxtime.clip',
#  '.fti': 'application/vnd.anser-web-funds-transfer-initiation',
#  '.fvt': 'video/vnd.fvt',
#  '.fxp': 'application/vnd.adobe.fxp',
#  '.fxpl': 'application/vnd.adobe.fxp',
#  '.fzs': 'application/vnd.fuzzysheet',
#  '.g2w': 'application/vnd.geoplan',
#  '.g3': 'image/g3fax',
#  '.g3w': 'application/vnd.geospace',
#  '.gac': 'application/vnd.groove-account',
#  '.gam': 'application/x-tads',
#  '.gbr': 'application/rpki-ghostbusters',
#  '.gca': 'application/x-gca-compressed',
#  '.gdl': 'model/vnd.gdl',
#  '.geo': 'application/vnd.dynageo',
#  '.gex': 'application/vnd.geometry-explorer',
#  '.ggb': 'application/vnd.geogebra.file',
#  '.ggt': 'application/vnd.geogebra.tool',
#  '.ghf': 'application/vnd.groove-help',
#  '.gif': 'image/gif',
#  '.gim': 'application/vnd.groove-identity-message',
#  '.gml': 'application/gml+xml',
#  '.gmx': 'application/vnd.gmx',
#  '.gnumeric': 'application/x-gnumeric',
#  '.gph': 'application/vnd.flographit',
#  '.gpx': 'application/gpx+xml',
#  '.gqf': 'application/vnd.grafeq',
#  '.gqs': 'application/vnd.grafeq',
#  '.gram': 'application/srgs',
#  '.gramps': 'application/x-gramps-xml',
#  '.gre': 'application/vnd.geometry-explorer',
#  '.grv': 'application/vnd.groove-injector',
#  '.grxml': 'application/srgs+xml',
#  '.gsf': 'application/x-font-ghostscript',
#  '.gtar': 'application/x-gtar',
#  '.gtm': 'application/vnd.groove-tool-message',
#  '.gtw': 'model/vnd.gtw',
#  '.gv': 'text/vnd.graphviz',
#  '.gxf': 'application/gxf',
#  '.gxt': 'application/vnd.geonext',
#  '.h': 'text/x-c',
#  '.h261': 'video/h261',
#  '.h263': 'video/h263',
#  '.h264': 'video/h264',
#  '.hal': 'application/vnd.hal+xml',
#  '.hbci': 'application/vnd.hbci',
#  '.hdf': 'application/x-hdf',
#  '.hh': 'text/x-c',
#  '.hlp': 'application/winhlp',
#  '.hpgl': 'application/vnd.hp-hpgl',
#  '.hpid': 'application/vnd.hp-hpid',
#  '.hps': 'application/vnd.hp-hps',
#  '.hqx': 'application/mac-binhex40',
#  '.htke': 'application/vnd.kenameaapp',
#  '.htm': 'text/html',
#  '.html': 'text/html',
#  '.hvd': 'application/vnd.yamaha.hv-dic',
#  '.hvp': 'application/vnd.yamaha.hv-voice',
#  '.hvs': 'application/vnd.yamaha.hv-script',
#  '.i2g': 'application/vnd.intergeo',
#  '.icc': 'application/vnd.iccprofile',
#  '.ice': 'x-conference/x-cooltalk',
#  '.icm': 'application/vnd.iccprofile',
#  '.ico': 'image/x-icon',
#  '.ics': 'text/calendar',
#  '.ief': 'image/ief',
#  '.ifb': 'text/calendar',
#  '.ifm': 'application/vnd.shana.informed.formdata',
#  '.iges': 'model/iges',
#  '.igl': 'application/vnd.igloader',
#  '.igm': 'application/vnd.insors.igm',
#  '.igs': 'model/iges',
#  '.igx': 'application/vnd.micrografx.igx',
#  '.iif': 'application/vnd.shana.informed.interchange',
#  '.imp': 'application/vnd.accpac.simply.imp',
#  '.ims': 'application/vnd.ms-ims',
#  '.in': 'text/plain',
#  '.ink': 'application/inkml+xml',
#  '.inkml': 'application/inkml+xml',
#  '.install': 'application/x-install-instructions',
#  '.iota': 'application/vnd.astraea-software.iota',
#  '.ipfix': 'application/ipfix',
#  '.ipk': 'application/vnd.shana.informed.package',
#  '.irm': 'application/vnd.ibm.rights-management',
#  '.irp': 'application/vnd.irepository.package+xml',
#  '.iso': 'application/x-iso9660-image',
#  '.itp': 'application/vnd.shana.informed.formtemplate',
#  '.ivp': 'application/vnd.immervision-ivp',
#  '.ivu': 'application/vnd.immervision-ivu',
#  '.jad': 'text/vnd.sun.j2me.app-descriptor',
#  '.jam': 'application/vnd.jam',
#  '.jar': 'application/java-archive',
#  '.java': 'text/x-java-source',
#  '.jisp': 'application/vnd.jisp',
#  '.jlt': 'application/vnd.hp-jlyt',
#  '.jnlp': 'application/x-java-jnlp-file',
#  '.joda': 'application/vnd.joost.joda-archive',
#  '.jp2': 'image/jp2',
#  '.jpe': 'image/jpeg',
#  '.jpeg': 'image/jpeg',
#  '.jpg': 'image/jpeg',
#  '.jpgm': 'video/jpm',
#  '.jpgv': 'video/jpeg',
#  '.jpm': 'video/jpm',
#  '.js': 'application/javascript',
#  '.json': 'application/json',
#  '.jsonml': 'application/jsonml+json',
#  '.kar': 'audio/midi',
#  '.karbon': 'application/vnd.kde.karbon',
#  '.kfo': 'application/vnd.kde.kformula',
#  '.kia': 'application/vnd.kidspiration',
#  '.kml': 'application/vnd.google-earth.kml+xml',
#  '.kmz': 'application/vnd.google-earth.kmz',
#  '.kne': 'application/vnd.kinar',
#  '.knp': 'application/vnd.kinar',
#  '.kon': 'application/vnd.kde.kontour',
#  '.kpr': 'application/vnd.kde.kpresenter',
#  '.kpt': 'application/vnd.kde.kpresenter',
#  '.kpxx': 'application/vnd.ds-keypoint',
#  '.ksh': 'text/plain',
#  '.ksp': 'application/vnd.kde.kspread',
#  '.ktr': 'application/vnd.kahootz',
#  '.ktx': 'image/ktx',
#  '.ktz': 'application/vnd.kahootz',
#  '.kwd': 'application/vnd.kde.kword',
#  '.kwt': 'application/vnd.kde.kword',
#  '.lasxml': 'application/vnd.las.las+xml',
#  '.latex': 'application/x-latex',
#  '.lbd': 'application/vnd.llamagraphics.life-balance.desktop',
#  '.lbe': 'application/vnd.llamagraphics.life-balance.exchange+xml',
#  '.les': 'application/vnd.hhe.lesson-player',
#  '.lha': 'application/x-lzh-compressed',
#  '.link66': 'application/vnd.route66.link66+xml',
#  '.list': 'text/plain',
#  '.list3820': 'application/vnd.ibm.modcap',
#  '.listafp': 'application/vnd.ibm.modcap',
#  '.lnk': 'application/x-ms-shortcut',
#  '.log': 'text/plain',
#  '.lostxml': 'application/lost+xml',
#  '.lrf': 'application/octet-stream',
#  '.lrm': 'application/vnd.ms-lrm',
#  '.ltf': 'application/vnd.frogans.ltf',
#  '.lvp': 'audio/vnd.lucent.voice',
#  '.lwp': 'application/vnd.lotus-wordpro',
#  '.lzh': 'application/x-lzh-compressed',
#  '.m13': 'application/x-msmediaview',
#  '.m14': 'application/x-msmediaview',
#  '.m1v': 'video/mpeg',
#  '.m21': 'application/mp21',
#  '.m2a': 'audio/mpeg',
#  '.m2v': 'video/mpeg',
#  '.m3a': 'audio/mpeg',
#  '.m3u': 'audio/x-mpegurl',
#  '.m3u8': 'application/x-mpegurl',
#  '.m4a': 'audio/mp4a-latm',
#  '.m4p': 'audio/mp4a-latm',
#  '.m4u': 'video/vnd.mpegurl',
#  '.m4v': 'video/x-m4v',
#  '.ma': 'application/mathematica',
#  '.mac': 'image/x-macpaint',
#  '.mads': 'application/mads+xml',
#  '.mag': 'application/vnd.ecowin.chart',
#  '.maker': 'application/vnd.framemaker',
#  '.man': 'text/troff',
#  '.manifest': 'text/cache-manifest',
#  '.mar': 'application/octet-stream',
#  '.mathml': 'application/mathml+xml',
#  '.mb': 'application/mathematica',
#  '.mbk': 'application/vnd.mobius.mbk',
#  '.mbox': 'application/mbox',
#  '.mc1': 'application/vnd.medcalcdata',
#  '.mcd': 'application/vnd.mcd',
#  '.mcurl': 'text/vnd.curl.mcurl',
#  '.mdb': 'application/x-msaccess',
#  '.mdi': 'image/vnd.ms-modi',
#  '.me': 'text/troff',
#  '.mesh': 'model/mesh',
#  '.meta4': 'application/metalink4+xml',
#  '.metalink': 'application/metalink+xml',
#  '.mets': 'application/mets+xml',
#  '.mfm': 'application/vnd.mfmp',
#  '.mft': 'application/rpki-manifest',
#  '.mgp': 'application/vnd.osgeo.mapguide.package',
#  '.mgz': 'application/vnd.proteus.magazine',
#  '.mht': 'message/rfc822',
#  '.mhtml': 'message/rfc822',
#  '.mid': 'audio/midi',
#  '.midi': 'audio/midi',
#  '.mie': 'application/x-mie',
#  '.mif': 'application/vnd.mif',
#  '.mime': 'message/rfc822',
#  '.mj2': 'video/mj2',
#  '.mjp2': 'video/mj2',
#  '.mjs': 'application/javascript',
#  '.mk3d': 'video/x-matroska',
#  '.mka': 'audio/x-matroska',
#  '.mks': 'video/x-matroska',
#  '.mkv': 'video/x-matroska',
#  '.mlp': 'application/vnd.dolby.mlp',
#  '.mmd': 'application/vnd.chipnuts.karaoke-mmd',
#  '.mmf': 'application/vnd.smaf',
#  '.mmr': 'image/vnd.fujixerox.edmics-mmr',
#  '.mng': 'video/x-mng',
#  '.mny': 'application/x-msmoney',
#  '.mobi': 'application/x-mobipocket-ebook',
#  '.mobipocket-ebook': 'application/octet-stream',
#  '.mods': 'application/mods+xml',
#  '.mov': 'video/quicktime',
#  '.movie': 'video/x-sgi-movie',
#  '.mp2': 'audio/mpeg',
#  '.mp21': 'application/mp21',
#  '.mp2a': 'audio/mpeg',
#  '.mp3': 'audio/mpeg',
#  '.mp4': 'video/mp4',
#  '.mp4a': 'audio/mp4',
#  '.mp4s': 'application/mp4',
#  '.mp4v': 'video/mp4',
#  '.mpa': 'video/mpeg',
#  '.mpc': 'application/vnd.mophun.certificate',
#  '.mpe': 'video/mpeg',
#  '.mpeg': 'video/mpeg',
#  '.mpg': 'video/mpeg',
#  '.mpg4': 'video/mp4',
#  '.mpga': 'audio/mpeg',
#  '.mpkg': 'application/vnd.apple.installer+xml',
#  '.mpm': 'application/vnd.blueice.multipass',
#  '.mpn': 'application/vnd.mophun.application',
#  '.mpp': 'application/vnd.ms-project',
#  '.mpt': 'application/vnd.ms-project',
#  '.mpy': 'application/vnd.ibm.minipay',
#  '.mqy': 'application/vnd.mobius.mqy',
#  '.mrc': 'application/marc',
#  '.mrcx': 'application/marcxml+xml',
#  '.ms': 'text/troff',
#  '.mscml': 'application/mediaservercontrol+xml',
#  '.mseed': 'application/vnd.fdsn.mseed',
#  '.mseq': 'application/vnd.mseq',
#  '.msf': 'application/vnd.epson.msf',
#  '.msh': 'model/mesh',
#  '.msi': 'application/x-msdownload',
#  '.msl': 'application/vnd.mobius.msl',
#  '.msty': 'application/vnd.muvee.style',
#  '.mts': 'model/vnd.mts',
#  '.mus': 'application/vnd.musician',
#  '.musicxml': 'application/vnd.recordare.musicxml+xml',
#  '.mvb': 'application/x-msmediaview',
#  '.mwf': 'application/vnd.mfer',
#  '.mxf': 'application/mxf',
#  '.mxl': 'application/vnd.recordare.musicxml',
#  '.mxml': 'application/xv+xml',
#  '.mxs': 'application/vnd.triscape.mxs',
#  '.mxu': 'video/vnd.mpegurl',
#  '.n-gage': 'application/vnd.nokia.n-gage.symbian.install',
#  '.n3': 'text/n3',
#  '.nb': 'application/mathematica',
#  '.nbp': 'application/vnd.wolfram.player',
#  '.nc': 'application/x-netcdf',
#  '.ncx': 'application/x-dtbncx+xml',
#  '.nfo': 'text/x-nfo',
#  '.ngdat': 'application/vnd.nokia.n-gage.data',
#  '.nitf': 'application/vnd.nitf',
#  '.nlu': 'application/vnd.neurolanguage.nlu',
#  '.nml': 'application/vnd.enliven',
#  '.nnd': 'application/vnd.noblenet-directory',
#  '.nns': 'application/vnd.noblenet-sealer',
#  '.nnw': 'application/vnd.noblenet-web',
#  '.npx': 'image/vnd.net-fpx',
#  '.nsc': 'application/x-conference',
#  '.nsf': 'application/vnd.lotus-notes',
#  '.ntf': 'application/vnd.nitf',
#  '.nws': 'message/rfc822',
#  '.nzb': 'application/x-nzb',
#  '.o': 'application/octet-stream',
#  '.oa2': 'application/vnd.fujitsu.oasys2',
#  '.oa3': 'application/vnd.fujitsu.oasys3',
#  '.oas': 'application/vnd.fujitsu.oasys',
#  '.obd': 'application/x-msbinder',
#  '.obj': 'application/x-tgif',
#  '.oda': 'application/oda',
#  '.odb': 'application/vnd.oasis.opendocument.database',
#  '.odc': 'application/vnd.oasis.opendocument.chart',
#  '.odf': 'application/vnd.oasis.opendocument.formula',
#  '.odft': 'application/vnd.oasis.opendocument.formula-template',
#  '.odg': 'application/vnd.oasis.opendocument.graphics',
#  '.odi': 'application/vnd.oasis.opendocument.image',
#  '.odm': 'application/vnd.oasis.opendocument.text-master',
#  '.odp': 'application/vnd.oasis.opendocument.presentation',
#  '.ods': 'application/vnd.oasis.opendocument.spreadsheet',
#  '.odt': 'application/vnd.oasis.opendocument.text',
#  '.oga': 'audio/ogg',
#  '.ogg': 'audio/ogg',
#  '.ogv': 'video/ogg',
#  '.ogx': 'application/ogg',
#  '.omdoc': 'application/omdoc+xml',
#  '.onepkg': 'application/onenote',
#  '.onetmp': 'application/onenote',
#  '.onetoc': 'application/onenote',
#  '.onetoc2': 'application/onenote',
#  '.opf': 'application/oebps-package+xml',
#  '.opml': 'text/x-opml',
#  '.oprc': 'application/vnd.palm',
#  '.org': 'application/vnd.lotus-organizer',
#  '.osf': 'application/vnd.yamaha.openscoreformat',
#  '.osfpvg': 'application/vnd.yamaha.openscoreformat.osfpvg+xml',
#  '.otc': 'application/vnd.oasis.opendocument.chart-template',
#  '.otf': 'font/otf',
#  '.otg': 'application/vnd.oasis.opendocument.graphics-template',
#  '.oth': 'application/vnd.oasis.opendocument.text-web',
#  '.oti': 'application/vnd.oasis.opendocument.image-template',
#  '.otp': 'application/vnd.oasis.opendocument.presentation-template',
#  '.ots': 'application/vnd.oasis.opendocument.spreadsheet-template',
#  '.ott': 'application/vnd.oasis.opendocument.text-template',
#  '.oxps': 'application/oxps',
#  '.oxt': 'application/vnd.openofficeorg.extension',
#  '.p': 'text/x-pascal',
#  '.p10': 'application/pkcs10',
#  '.p12': 'application/x-pkcs12',
#  '.p7b': 'application/x-pkcs7-certificates',
#  '.p7c': 'application/pkcs7-mime',
#  '.p7m': 'application/pkcs7-mime',
#  '.p7r': 'application/x-pkcs7-certreqresp',
#  '.p7s': 'application/pkcs7-signature',
#  '.p8': 'application/pkcs8',
#  '.pas': 'text/x-pascal',
#  '.paw': 'application/vnd.pawaafile',
#  '.pbd': 'application/vnd.powerbuilder6',
#  '.pbm': 'image/x-portable-bitmap',
#  '.pcap': 'application/vnd.tcpdump.pcap',
#  '.pcf': 'application/x-font-pcf',
#  '.pcl': 'application/vnd.hp-pcl',
#  '.pclxl': 'application/vnd.hp-pclxl',
#  '.pct': 'image/x-pict',
#  '.pcurl': 'application/vnd.curl.pcurl',
#  '.pcx': 'image/x-pcx',
#  '.pdb': 'application/vnd.palm',
#  '.pdf': 'application/pdf',
#  '.pfa': 'application/x-font-type1',
#  '.pfb': 'application/x-font-type1',
#  '.pfm': 'application/x-font-type1',
#  '.pfr': 'application/font-tdpfr',
#  '.pfx': 'application/x-pkcs12',
#  '.pgm': 'image/x-portable-graymap',
#  '.pgn': 'application/x-chess-pgn',
#  '.pgp': 'application/pgp-encrypted',
#  '.pic': 'image/x-pict',
#  '.pict': 'image/pict',
#  '.pkg': 'application/octet-stream',
#  '.pki': 'application/pkixcmp',
#  '.pkipath': 'application/pkix-pkipath',
#  '.pl': 'text/plain',
#  '.plb': 'application/vnd.3gpp.pic-bw-large',
#  '.plc': 'application/vnd.mobius.plc',
#  '.plf': 'application/vnd.pocketlearn',
#  '.pls': 'application/pls+xml',
#  '.pml': 'application/vnd.ctc-posml',
#  '.png': 'image/png',
#  '.pnm': 'image/x-portable-anymap',
#  '.pnt': 'image/x-macpaint',
#  '.pntg': 'image/x-macpaint',
#  '.portpkg': 'application/vnd.macports.portpkg',
#  '.pot': 'application/vnd.ms-powerpoint',
#  '.potm': 'application/vnd.ms-powerpoint.template.macroenabled.12',
#  '.potx': 'application/vnd.openxmlformats-officedocument.presentationml.template',
#  '.ppa': 'application/vnd.ms-powerpoint',
#  '.ppam': 'application/vnd.ms-powerpoint.addin.macroenabled.12',
#  '.ppd': 'application/vnd.cups-ppd',
#  '.ppm': 'image/x-portable-pixmap',
#  '.pps': 'application/vnd.ms-powerpoint',
#  '.ppsm': 'application/vnd.ms-powerpoint.slideshow.macroenabled.12',
#  '.ppsx': 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
#  '.ppt': 'application/vnd.ms-powerpoint',
#  '.pptm': 'application/vnd.ms-powerpoint.presentation.macroenabled.12',
#  '.pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
#  '.pqa': 'application/vnd.palm',
#  '.prc': 'application/x-mobipocket-ebook',
#  '.pre': 'application/vnd.lotus-freelance',
#  '.prf': 'application/pics-rules',
#  '.ps': 'application/postscript',
#  '.psb': 'application/vnd.3gpp.pic-bw-small',
#  '.psd': 'image/vnd.adobe.photoshop',
#  '.psf': 'application/x-font-linux-psf',
#  '.pskcxml': 'application/pskc+xml',
#  '.ptid': 'application/vnd.pvi.ptid1',
#  '.pub': 'application/x-mspublisher',
#  '.pvb': 'application/vnd.3gpp.pic-bw-var',
#  '.pwn': 'application/vnd.3m.post-it-notes',
#  '.pwz': 'application/vnd.ms-powerpoint',
#  '.py': 'text/x-python',
#  '.pya': 'audio/vnd.ms-playready.media.pya',
#  '.pyc': 'application/x-python-code',
#  '.pyo': 'application/x-python-code',
#  '.pyv': 'video/vnd.ms-playready.media.pyv',
#  '.qam': 'application/vnd.epson.quickanime',
#  '.qbo': 'application/vnd.intu.qbo',
#  '.qfx': 'application/vnd.intu.qfx',
#  '.qps': 'application/vnd.publishare-delta-tree',
#  '.qt': 'video/quicktime',
#  '.qti': 'image/x-quicktime',
#  '.qtif': 'image/x-quicktime',
#  '.qwd': 'application/vnd.quark.quarkxpress',
#  '.qwt': 'application/vnd.quark.quarkxpress',
#  '.qxb': 'application/vnd.quark.quarkxpress',
#  '.qxd': 'application/vnd.quark.quarkxpress',
#  '.qxl': 'application/vnd.quark.quarkxpress',
#  '.qxt': 'application/vnd.quark.quarkxpress',
#  '.ra': 'audio/x-pn-realaudio',
#  '.ram': 'audio/x-pn-realaudio',
#  '.rar': 'application/x-rar-compressed',
#  '.ras': 'image/x-cmu-raster',
#  '.rcprofile': 'application/vnd.ipunplugged.rcprofile',
#  '.rdf': 'application/rdf+xml',
#  '.rdz': 'application/vnd.data-vision.rdz',
#  '.rep': 'application/vnd.businessobjects',
#  '.res': 'application/x-dtbresource+xml',
#  '.rgb': 'image/x-rgb',
#  '.rif': 'application/reginfo+xml',
#  '.rip': 'audio/vnd.rip',
#  '.ris': 'application/x-research-info-systems',
#  '.rl': 'application/resource-lists+xml',
#  '.rlc': 'image/vnd.fujixerox.edmics-rlc',
#  '.rld': 'application/resource-lists-diff+xml',
#  '.rm': 'application/vnd.rn-realmedia',
#  '.rmi': 'audio/midi',
#  '.rmp': 'audio/x-pn-realaudio-plugin',
#  '.rms': 'application/vnd.jcp.javame.midlet-rms',
#  '.rmvb': 'application/vnd.rn-realmedia-vbr',
#  '.rnc': 'application/relax-ng-compact-syntax',
#  '.roa': 'application/rpki-roa',
#  '.roff': 'text/troff',
#  '.rp9': 'application/vnd.cloanto.rp9',
#  '.rpss': 'application/vnd.nokia.radio-presets',
#  '.rpst': 'application/vnd.nokia.radio-preset',
#  '.rq': 'application/sparql-query',
#  '.rs': 'application/rls-services+xml',
#  '.rsd': 'application/rsd+xml',
#  '.rss': 'application/rss+xml',
#  '.rtf': 'application/rtf',
#  '.rtx': 'text/richtext',
#  '.s': 'text/x-asm',
#  '.s3m': 'audio/s3m',
#  '.saf': 'application/vnd.yamaha.smaf-audio',
#  '.sbml': 'application/sbml+xml',
#  '.sc': 'application/vnd.ibm.secure-container',
#  '.scd': 'application/x-msschedule',
#  '.scm': 'application/vnd.lotus-screencam',
#  '.scq': 'application/scvp-cv-request',
#  '.scs': 'application/scvp-cv-response',
#  '.scurl': 'text/vnd.curl.scurl',
#  '.sda': 'application/vnd.stardivision.draw',
#  '.sdc': 'application/vnd.stardivision.calc',
#  '.sdd': 'application/vnd.stardivision.impress',
#  '.sdkd': 'application/vnd.solent.sdkm+xml',
#  '.sdkm': 'application/vnd.solent.sdkm+xml',
#  '.sdp': 'application/sdp',
#  '.sdw': 'application/vnd.stardivision.writer',
#  '.see': 'application/vnd.seemail',
#  '.seed': 'application/vnd.fdsn.seed',
#  '.sema': 'application/vnd.sema',
#  '.semd': 'application/vnd.semd',
#  '.semf': 'application/vnd.semf',
#  '.ser': 'application/java-serialized-object',
#  '.setpay': 'application/set-payment-initiation',
#  '.setreg': 'application/set-registration-initiation',
#  '.sfd-hdstx': 'application/vnd.hydrostatix.sof-data',
#  '.sfs': 'application/vnd.spotfire.sfs',
#  '.sfv': 'text/x-sfv',
#  '.sgi': 'image/sgi',
#  '.sgl': 'application/vnd.stardivision.writer-global',
#  '.sgm': 'text/sgml',
#  '.sgml': 'text/sgml',
#  '.sh': 'application/x-sh',
#  '.shar': 'application/x-shar',
#  '.shf': 'application/shf+xml',
#  '.sid': 'image/x-mrsid-image',
#  '.sig': 'application/pgp-signature',
#  '.sil': 'audio/silk',
#  '.silo': 'model/mesh',
#  '.sis': 'application/vnd.symbian.install',
#  '.sisx': 'application/vnd.symbian.install',
#  '.sit': 'application/x-stuffit',
#  '.sitx': 'application/x-stuffitx',
#  '.skd': 'application/vnd.koan',
#  '.skm': 'application/vnd.koan',
#  '.skp': 'application/vnd.koan',
#  '.skt': 'application/vnd.koan',
#  '.sldm': 'application/vnd.ms-powerpoint.slide.macroenabled.12',
#  '.sldx': 'application/vnd.openxmlformats-officedocument.presentationml.slide',
#  '.slt': 'application/vnd.epson.salt',
#  '.sm': 'application/vnd.stepmania.stepchart',
#  '.smf': 'application/vnd.stardivision.math',
#  '.smi': 'application/smil+xml',
#  '.smil': 'application/smil+xml',
#  '.smv': 'video/x-smv',
#  '.smzip': 'application/vnd.stepmania.package',
#  '.snd': 'audio/basic',
#  '.snf': 'application/x-font-snf',
#  '.so': 'application/octet-stream',
#  '.spc': 'application/x-pkcs7-certificates',
#  '.spf': 'application/vnd.yamaha.smaf-phrase',
#  '.spl': 'application/x-futuresplash',
#  '.spot': 'text/vnd.in3d.spot',
#  '.spp': 'application/scvp-vp-response',
#  '.spq': 'application/scvp-vp-request',
#  '.spx': 'audio/ogg',
#  '.sql': 'application/x-sql',
#  '.src': 'application/x-wais-source',
#  '.srt': 'application/x-subrip',
#  '.sru': 'application/sru+xml',
#  '.srx': 'application/sparql-results+xml',
#  '.ssdl': 'application/ssdl+xml',
#  '.sse': 'application/vnd.kodak-descriptor',
#  '.ssf': 'application/vnd.epson.ssf',
#  '.ssml': 'application/ssml+xml',
#  '.st': 'application/vnd.sailingtracker.track',
#  '.stc': 'application/vnd.sun.xml.calc.template',
#  '.std': 'application/vnd.sun.xml.draw.template',
#  '.stf': 'application/vnd.wt.stf',
#  '.sti': 'application/vnd.sun.xml.impress.template',
#  '.stk': 'application/hyperstudio',
#  '.stl': 'application/vnd.ms-pki.stl',
#  '.str': 'application/vnd.pg.format',
#  '.stw': 'application/vnd.sun.xml.writer.template',
#  '.sub': 'text/vnd.dvb.subtitle',
#  '.sus': 'application/vnd.sus-calendar',
#  '.susp': 'application/vnd.sus-calendar',
#  '.sv4cpio': 'application/x-sv4cpio',
#  '.sv4crc': 'application/x-sv4crc',
#  '.svc': 'application/vnd.dvb.service',
#  '.svd': 'application/vnd.svd',
#  '.svg': 'image/svg+xml',
#  '.svgz': 'image/svg+xml',
#  '.swa': 'application/x-director',
#  '.swf': 'application/x-shockwave-flash',
#  '.swi': 'application/vnd.aristanetworks.swi',
#  '.sxc': 'application/vnd.sun.xml.calc',
#  '.sxd': 'application/vnd.sun.xml.draw',
#  '.sxg': 'application/vnd.sun.xml.writer.global',
#  '.sxi': 'application/vnd.sun.xml.impress',
#  '.sxm': 'application/vnd.sun.xml.math',
#  '.sxw': 'application/vnd.sun.xml.writer',
#  '.t': 'text/troff',
#  '.t3': 'application/x-t3vm-image',
#  '.taglet': 'application/vnd.mynfc',
#  '.tao': 'application/vnd.tao.intent-module-archive',
#  '.tar': 'application/x-tar',
#  '.tcap': 'application/vnd.3gpp2.tcap',
#  '.tcl': 'application/x-tcl',
#  '.teacher': 'application/vnd.smart.teacher',
#  '.tei': 'application/tei+xml',
#  '.teicorpus': 'application/tei+xml',
#  '.tex': 'application/x-tex',
#  '.texi': 'application/x-texinfo',
#  '.texinfo': 'application/x-texinfo',
#  '.text': 'text/plain',
#  '.tfi': 'application/thraud+xml',
#  '.tfm': 'application/x-tex-tfm',
#  '.tga': 'image/x-tga',
#  '.thmx': 'application/vnd.ms-officetheme',
#  '.tif': 'image/tiff',
#  '.tiff': 'image/tiff',
#  '.tmo': 'application/vnd.tmobile-livetv',
#  '.torrent': 'application/x-bittorrent',
#  '.tpl': 'application/vnd.groove-tool-template',
#  '.tpt': 'application/vnd.trid.tpt',
#  '.tr': 'text/troff',
#  '.tra': 'application/vnd.trueapp',
#  '.trm': 'application/x-msterminal',
#  '.ts': 'video/mp2t',
#  '.tsd': 'application/timestamped-data',
#  '.tsv': 'text/tab-separated-values',
#  '.ttc': 'font/collection',
#  '.ttf': 'font/ttf',
#  '.ttl': 'text/turtle',
#  '.twd': 'application/vnd.simtech-mindmapper',
#  '.twds': 'application/vnd.simtech-mindmapper',
#  '.txd': 'application/vnd.genomatix.tuxedo',
#  '.txf': 'application/vnd.mobius.txf',
#  '.txt': 'text/plain',
#  '.u32': 'application/x-authorware-bin',
#  '.udeb': 'application/x-debian-package',
#  '.ufd': 'application/vnd.ufdl',
#  '.ufdl': 'application/vnd.ufdl',
#  '.ulx': 'application/x-glulx',
#  '.umj': 'application/vnd.umajin',
#  '.unityweb': 'application/vnd.unity',
#  '.uoml': 'application/vnd.uoml+xml',
#  '.uri': 'text/uri-list',
#  '.uris': 'text/uri-list',
#  '.urls': 'text/uri-list',
#  '.ustar': 'application/x-ustar',
#  '.utz': 'application/vnd.uiq.theme',
#  '.uu': 'text/x-uuencode',
#  '.uva': 'audio/vnd.dece.audio',
#  '.uvd': 'application/vnd.dece.data',
#  '.uvf': 'application/vnd.dece.data',
#  '.uvg': 'image/vnd.dece.graphic',
#  '.uvh': 'video/vnd.dece.hd',
#  '.uvi': 'image/vnd.dece.graphic',
#  '.uvm': 'video/vnd.dece.mobile',
#  '.uvp': 'video/vnd.dece.pd',
#  '.uvs': 'video/vnd.dece.sd',
#  '.uvt': 'application/vnd.dece.ttml+xml',
#  '.uvu': 'video/vnd.uvvu.mp4',
#  '.uvv': 'video/vnd.dece.video',
#  '.uvva': 'audio/vnd.dece.audio',
#  '.uvvd': 'application/vnd.dece.data',
#  '.uvvf': 'application/vnd.dece.data',
#  '.uvvg': 'image/vnd.dece.graphic',
#  '.uvvh': 'video/vnd.dece.hd',
#  '.uvvi': 'image/vnd.dece.graphic',
#  '.uvvm': 'video/vnd.dece.mobile',
#  '.uvvp': 'video/vnd.dece.pd',
#  '.uvvs': 'video/vnd.dece.sd',
#  '.uvvt': 'application/vnd.dece.ttml+xml',
#  '.uvvu': 'video/vnd.uvvu.mp4',
#  '.uvvv': 'video/vnd.dece.video',
#  '.uvvx': 'application/vnd.dece.unspecified',
#  '.uvvz': 'application/vnd.dece.zip',
#  '.uvx': 'application/vnd.dece.unspecified',
#  '.uvz': 'application/vnd.dece.zip',
#  '.vcard': 'text/vcard',
#  '.vcd': 'application/x-cdlink',
#  '.vcf': 'text/x-vcard',
#  '.vcg': 'application/vnd.groove-vcard',
#  '.vcs': 'text/x-vcalendar',
#  '.vcx': 'application/vnd.vcx',
#  '.vis': 'application/vnd.visionary',
#  '.viv': 'video/vnd.vivo',
#  '.vob': 'video/x-ms-vob',
#  '.vor': 'application/vnd.stardivision.writer',
#  '.vox': 'application/x-authorware-bin',
#  '.vrml': 'model/vrml',
#  '.vsd': 'application/vnd.visio',
#  '.vsf': 'application/vnd.vsf',
#  '.vss': 'application/vnd.visio',
#  '.vst': 'application/vnd.visio',
#  '.vsw': 'application/vnd.visio',
#  '.vtu': 'model/vnd.vtu',
#  '.vxml': 'application/voicexml+xml',
#  '.w3d': 'application/x-director',
#  '.wad': 'application/x-doom',
#  '.wav': 'audio/x-wav',
#  '.wax': 'audio/x-ms-wax',
#  '.wbmp': 'image/vnd.wap.wbmp',
#  '.wbs': 'application/vnd.criticaltools.wbs+xml',
#  '.wbxml': 'application/vnd.wap.wbxml',
#  '.wcm': 'application/vnd.ms-works',
#  '.wdb': 'application/vnd.ms-works',
#  '.wdp': 'image/vnd.ms-photo',
#  '.weba': 'audio/webm',
#  '.webm': 'video/webm',
#  '.webp': 'image/webp',
#  '.wg': 'application/vnd.pmi.widget',
#  '.wgt': 'application/widget',
#  '.wiz': 'application/msword',
#  '.wks': 'application/vnd.ms-works',
#  '.wm': 'video/x-ms-wm',
#  '.wma': 'audio/x-ms-wma',
#  '.wmd': 'application/x-ms-wmd',
#  '.wmf': 'application/x-msmetafile',
#  '.wml': 'text/vnd.wap.wml',
#  '.wmlc': 'application/vnd.wap.wmlc',
#  '.wmls': 'text/vnd.wap.wmlscript',
#  '.wmlsc': 'application/vnd.wap.wmlscriptc',
#  '.wmv': 'video/x-ms-wmv',
#  '.wmx': 'video/x-ms-wmx',
#  '.wmz': 'application/x-msmetafile',
#  '.woff': 'font/woff',
#  '.woff2': 'font/woff2',
#  '.wpd': 'application/vnd.wordperfect',
#  '.wpl': 'application/vnd.ms-wpl',
#  '.wps': 'application/vnd.ms-works',
#  '.wqd': 'application/vnd.wqd',
#  '.wri': 'application/x-mswrite',
#  '.wrl': 'model/vrml',
#  '.wsdl': 'application/wsdl+xml',
#  '.wspolicy': 'application/wspolicy+xml',
#  '.wtb': 'application/vnd.webturbo',
#  '.wvx': 'video/x-ms-wvx',
#  '.x32': 'application/x-authorware-bin',
#  '.x3d': 'model/x3d+xml',
#  '.x3db': 'model/x3d+binary',
#  '.x3dbz': 'model/x3d+binary',
#  '.x3dv': 'model/x3d+vrml',
#  '.x3dvz': 'model/x3d+vrml',
#  '.x3dz': 'model/x3d+xml',
#  '.xaml': 'application/xaml+xml',
#  '.xap': 'application/x-silverlight-app',
#  '.xar': 'application/vnd.xara',
#  '.xbap': 'application/x-ms-xbap',
#  '.xbd': 'application/vnd.fujixerox.docuworks.binder',
#  '.xbm': 'image/x-xbitmap',
#  '.xdf': 'application/xcap-diff+xml',
#  '.xdm': 'application/vnd.syncml.dm+xml',
#  '.xdp': 'application/vnd.adobe.xdp+xml',
#  '.xdssc': 'application/dssc+xml',
#  '.xdw': 'application/vnd.fujixerox.docuworks',
#  '.xenc': 'application/xenc+xml',
#  '.xer': 'application/patch-ops-error+xml',
#  '.xfdf': 'application/vnd.adobe.xfdf',
#  '.xfdl': 'application/vnd.xfdl',
#  '.xht': 'application/xhtml+xml',
#  '.xhtml': 'application/xhtml+xml',
#  '.xhvml': 'application/xv+xml',
#  '.xif': 'image/vnd.xiff',
#  '.xla': 'application/vnd.ms-excel',
#  '.xlam': 'application/vnd.ms-excel.addin.macroenabled.12',
#  '.xlb': 'application/vnd.ms-excel',
#  '.xlc': 'application/vnd.ms-excel',
#  '.xlf': 'application/x-xliff+xml',
#  '.xlm': 'application/vnd.ms-excel',
#  '.xls': 'application/vnd.ms-excel',
#  '.xlsb': 'application/vnd.ms-excel.sheet.binary.macroenabled.12',
#  '.xlsm': 'application/vnd.ms-excel.sheet.macroenabled.12',
#  '.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
#  '.xlt': 'application/vnd.ms-excel',
#  '.xltm': 'application/vnd.ms-excel.template.macroenabled.12',
#  '.xltx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
#  '.xlw': 'application/vnd.ms-excel',
#  '.xm': 'audio/xm',
#  '.xml': 'application/xml',
#  '.xo': 'application/vnd.olpc-sugar',
#  '.xop': 'application/xop+xml',
#  '.xpdl': 'application/xml',
#  '.xpi': 'application/x-xpinstall',
#  '.xpl': 'application/xproc+xml',
#  '.xpm': 'image/x-xpixmap',
#  '.xpr': 'application/vnd.is-xpr',
#  '.xps': 'application/vnd.ms-xpsdocument',
#  '.xpw': 'application/vnd.intercon.formnet',
#  '.xpx': 'application/vnd.intercon.formnet',
#  '.xsl': 'application/xml',
#  '.xslt': 'application/xslt+xml',
#  '.xsm': 'application/vnd.syncml+xml',
#  '.xspf': 'application/xspf+xml',
#  '.xul': 'application/vnd.mozilla.xul+xml',
#  '.xvm': 'application/xv+xml',
#  '.xvml': 'application/xv+xml',
#  '.xwd': 'image/x-xwindowdump',
#  '.xyz': 'chemical/x-xyz',
#  '.xz': 'application/x-xz',
#  '.yang': 'application/yang',
#  '.yin': 'application/yin+xml',
#  '.z1': 'application/x-zmachine',
#  '.z2': 'application/x-zmachine',
#  '.z3': 'application/x-zmachine',
#  '.z4': 'application/x-zmachine',
#  '.z5': 'application/x-zmachine',
#  '.z6': 'application/x-zmachine',
#  '.z7': 'application/x-zmachine',
#  '.z8': 'application/x-zmachine',
#  '.zaz': 'application/vnd.zzazz.deck+xml',
#  '.zip': 'application/zip',
#  '.zir': 'application/vnd.zul',
#  '.zirz': 'application/vnd.zul',
#  '.zmm': 'application/vnd.handheld-entertainment+xml'}