Skip to content

En Python, vous pouvez utiliser le module ๐ฆโ€Œ๐ขโ€Œ๐ฆโ€Œ๐žโ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ๐ฌโ€Œ pour deviner le type MIME ร  partir d’un nom de fichier ou d’une extension d’URL, ou pour deviner l’extension de fichier ร  partir d’un type MIME.

Tous les exemples de code de cet article supposent que le module ๐ฆโ€Œ๐ขโ€Œ๐ฆโ€Œ๐žโ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ๐ฌโ€Œ a รฉtรฉ importรฉ. Comme il est inclus dans la bibliothรจque standard, aucune installation supplรฉmentaire n’est requise.

import mimetypes 

Types MIME (types de mรฉdias)

Un type MIME, รฉgalement connu sous le nom de type de mรฉdia, est un identifiant en deux parties pour les formats de fichiers et les contenus de format transmis sur Internet.

Un type de mรฉdia (anciennement appelรฉ type MIME) est un identifiant en deux parties pour les formats de fichiers et les contenus de format transmis sur Internet. Type de mรฉdia โ€” Wikipรฉdia

Devinez les types MIME ร  partir des noms de fichiers/URL : ๐ โ€Œ๐ฎโ€Œ๐žโ€Œ๐ฌโ€Œ๐ฌโ€Œ_๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ()

Utilisez la fonction ๐ โ€Œ๐ฎโ€Œ๐žโ€Œ๐ฌโ€Œ๐ฌโ€Œ_๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ() pour deviner le type MIME en fonction d’un nom de fichier ou d’une URL. Elle renvoie un tuple de (๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ, ๐žโ€Œ๐งโ€Œ๐œโ€Œ๐จโ€Œ๐โ€Œ๐ขโ€Œ๐งโ€Œ๐ โ€Œ) .

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'> 

Le premier รฉlรฉment du tuple, ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ , indique le type MIME. Le deuxiรจme รฉlรฉment, ๐žโ€Œ๐งโ€Œ๐œโ€Œ๐จโ€Œ๐โ€Œ๐ขโ€Œ๐งโ€Œ๐ โ€Œ , renvoie une valeur, comme lorsque le fichier est compressรฉ avec ๐ โ€Œ๐ณโ€Œ๐ขโ€Œ๐ฉโ€Œ . Sinon, c’est N๐จโ€Œ๐งโ€Œ๐žโ€Œ .

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

Il fonctionne avec des chaรฎnes de chemin contenant des rรฉpertoires ou des URL. Le type est dรฉterminรฉ uniquement par l’extension, sans examiner le contenu rรฉel du fichier.

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

Les majuscules sont รฉgalement acceptables.

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

Dรฉvelopper les extensions ร  partir des types MIME : ๐ โ€Œ๐ฎโ€Œ๐žโ€Œ๐ฌโ€Œ๐ฌโ€Œ_๐šโ€Œ๐ฅโ€Œ๐ฅโ€Œ_๐žโ€Œ ๐ฑโ€Œ๐ญโ€Œ๐žโ€Œ๐งโ€Œ๐ฌโ€Œ๐ขโ€Œ๐จโ€Œ๐งโ€Œ๐ฌโ€Œ() , ๐ โ€Œ๐ฎโ€Œ๐žโ€Œ๐ฌ …_๐žโ€Œ๐ฑโ€Œ๐ญโ€Œ๐žโ€Œ๐งโ€Œ๐ฌโ€Œ๐ขโ€Œ๐จโ€Œ๐งโ€Œ()

Utiliser ๐ โ€Œ๐ฎโ€Œ๐žโ€Œ๐ฌโ€Œ๐ฌโ€Œ_๐šโ€Œ๐ฅโ€Œ๐ฅโ€Œ_๐žโ€Œ ๐ฑโ€Œ๐ญโ€Œ๐žโ€Œ๐งโ€Œ๐ฌโ€Œ๐ขโ€Œ๐จโ€Œ๐งโ€Œ๐ฌโ€Œ() et ๐ โ€Œ๐ฎโ€Œ๐žโ€Œ๐ฌโ€Œ๐ฌโ€Œ_๐žโ€Œ๐ฑโ€Œ๐ญโ€Œ๐žโ€Œ๐งโ€Œ๐ฌโ€Œ๐ขโ€Œ๐จโ€Œ๐งโ€Œ() pour deviner les extensions en fonction du tapez MIME.

๐ โ€Œ๐ฎโ€Œ๐žโ€Œ๐ฌโ€Œ๐ฌโ€Œ_๐šโ€Œ๐ฅโ€Œ๐ฅโ€Œ_๐žโ€Œ ๐ฑโ€Œ๐ญโ€Œ๐žโ€Œ๐งโ€Œ๐ฌโ€Œ๐ขโ€Œ๐จโ€Œ๐งโ€Œ๐ฌโ€Œ() renvoie une liste et ๐ โ€Œ๐ฎโ€Œ๐žโ€Œ๐ฌโ€Œ๐ฌโ€Œ_๐žโ€Œ๐ฑโ€Œ๐ญโ€Œ๐žโ€Œ๐งโ€Œ๐ฌโ€Œ๐ขโ€Œ๐จโ€Œ๐งโ€Œ() renvoie le premier รฉlรฉment de cette liste. liste.

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

Si un type MIME inexistant est spรฉcifiรฉ, une liste vide et N๐จโ€Œ๐งโ€Œ๐žโ€Œ sont respectivement renvoyรฉes. Bien entendu, mรชme une lรฉgรจre diffรฉrence nโ€™est pas acceptable.

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

Obtenez le dictionnaire des extensions et des types MIME : ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ๐ฌโ€Œ_๐ฆโ€Œ๐šโ€Œ๐ฉโ€Œ

L’attribut ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ๐ฌโ€Œ_๐ฆโ€Œ๐šโ€Œ๐ฉโ€Œ contient un dictionnaire avec des extensions comme clรฉs et des types MIME comme valeurs.

La fonction ๐ขโ€Œ๐งโ€Œ๐ขโ€Œ๐ญโ€Œ() du module ๐ฆโ€Œ๐ขโ€Œ๐ฆโ€Œ๐žโ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ๐ฌโ€Œ initialise ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ๐ฌโ€Œ_๐ฆโ€Œ๐šโ€Œ๐ฉโ€Œ . Elle est automatiquement exรฉcutรฉe par des fonctions comme ๐ โ€Œ๐ฎโ€Œ๐žโ€Œ๐ฌโ€Œ๐ฌโ€Œ_๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ() , mettant ร  jour ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ๐ฌโ€Œ_๐ฆโ€Œ๐šโ€Œ๐ฉโ€Œ avec les valeurs par dรฉfaut du systรจme. Sans cela, ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ๐ฌโ€Œ_๐ฆโ€Œ๐šโ€Œ๐ฉโ€Œ ne contient que des valeurs intรฉgrรฉes.

L’attribut ๐ขโ€Œ๐งโ€Œ๐ขโ€Œ๐ญโ€Œ๐žโ€Œ๐โ€Œ peut dรฉterminer si ๐ขโ€Œ๐งโ€Œ๐ขโ€Œ๐ญโ€Œ๐žโ€Œ๐โ€Œ a รฉtรฉ exรฉcutรฉ .

if not mimetypes.inited: mimetypes.init() print(type(mimetypes.types_map)) # <class 'dict'> print(len(mimetypes.types_map)) # 1029 print(mimetypes.types_map['.jpg']) # image/jpeg 

Cet exemple a รฉtรฉ exรฉcutรฉ sur macOS Sonoma, oรน le dictionnaire contient 1029 รฉlรฉments.

Notez que les extensions et les types MIME dans ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ๐ฌโ€Œ_๐ฆโ€Œ๐šโ€Œ๐ฉโ€Œ varient selon l’environnement. Par exemple, dans mes tests, Markdown ( .๐ฆโ€Œ๐โ€Œ / ๐ญโ€Œ๐žโ€Œ๐ฑโ€Œ๐ญโ€Œ/๐ฆโ€Œ๐šโ€Œ๐ซโ€Œ๐คโ€Œ๐โ€Œ๐จโ€Œ๐ฐโ€Œ๐งโ€Œ ) est apparu dans ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ๐ฌโ€Œ_๐ฆโ€Œ๐šโ€Œ๐ฉโ€Œ pour Ubuntu, mais pas dans macOS. ร‰tant donnรฉ que des fonctions telles que ๐ โ€Œ๐ฎโ€Œ๐žโ€Œ๐ฌโ€Œ๐ฌโ€Œ_๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ() reposent sur ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ๐ฌโ€Œ_๐ฆโ€Œ๐šโ€Œ๐ฉโ€Œ , leurs rรฉsultats peuvent รฉgalement diffรฉrer selon les environnements.

Vous pouvez consulter la liste des extensions et leurs types MIME en tapant ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ๐ฌโ€Œ_๐ฆโ€Œ๐šโ€Œ๐ฉโ€Œ . Ici, le module ๐ฉโ€Œ๐ฉโ€Œ๐ซโ€Œ๐ขโ€Œ๐งโ€Œ๐ญโ€Œ est utilisรฉ pour une meilleure lisibilitรฉ.

import pprint 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', # '.3gpp': 'audio/3gpp', # '.3gpp2': 'audio/3gpp2', # '.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', # '.adts': 'audio/aac', # '.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', # '.ass': 'audio/aac', # '.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', # '.avif': 'image/avif', # '.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', # '.h5': 'application/x-hdf5', # '.hal': 'application/vnd.hal+xml', # '.hbci': 'application/vnd.hbci', # '.hdf': 'application/x-hdf', # '.heic': 'image/heic', # '.heif': 'image/heif', # '.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', # '.loas': 'audio/aac', # '.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', # '.nq': 'application/n-quads', # '.nsc': 'application/x-conference', # '.nsf': 'application/vnd.lotus-notes', # '.nt': 'application/n-triples', # '.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', # '.opus': 'audio/opus', # '.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', # '.trig': 'application/trig', # '.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', # '.vtt': 'text/vtt', # '.vtu': 'model/vnd.vtu', # '.vxml': 'application/voicexml+xml', # '.w3d': 'application/x-director', # '.wad': 'application/x-doom', # '.wasm': 'application/wasm', # '.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', # '.webmanifest': 'application/manifest+json', # '.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'}