github.com/cs3org/reva/v2@v2.27.7/pkg/mime/mime.go (about)

     1  // Copyright 2018-2021 CERN
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //     http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  //
    15  // In applying this license, CERN does not waive the privileges and immunities
    16  // granted to it by virtue of its status as an Intergovernmental Organization
    17  // or submit itself to any jurisdiction.
    18  
    19  package mime
    20  
    21  import (
    22  	"path"
    23  	"strings"
    24  	"sync"
    25  )
    26  
    27  const defaultMimeDir = "httpd/unix-directory"
    28  
    29  var mimeTypes = map[string]string{
    30  	"123":                      "application/vnd.lotus-1-2-3",
    31  	"3dml":                     "text/vnd.in3d.3dml",
    32  	"3ds":                      "image/x-3ds",
    33  	"3g2":                      "video/3gpp2",
    34  	"3gp":                      "video/3gpp",
    35  	"3gpp":                     "video/3gpp",
    36  	"7z":                       "application/x-7z-compressed",
    37  	"aab":                      "application/x-authorware-bin",
    38  	"aac":                      "audio/x-aac",
    39  	"aam":                      "application/x-authorware-map",
    40  	"aas":                      "application/x-authorware-seg",
    41  	"abw":                      "application/x-abiword",
    42  	"ac":                       "application/pkix-attr-cert",
    43  	"acc":                      "application/vnd.americandynamics.acc",
    44  	"ace":                      "application/x-ace-compressed",
    45  	"acu":                      "application/vnd.acucobol",
    46  	"acutc":                    "application/vnd.acucorp",
    47  	"adp":                      "audio/adpcm",
    48  	"aep":                      "application/vnd.audiograph",
    49  	"afm":                      "application/x-font-type1",
    50  	"afp":                      "application/vnd.ibm.modcap",
    51  	"ahead":                    "application/vnd.ahead.space",
    52  	"ai":                       "application/postscript",
    53  	"aif":                      "audio/x-aiff",
    54  	"aifc":                     "audio/x-aiff",
    55  	"aiff":                     "audio/x-aiff",
    56  	"air":                      "application/vnd.adobe.air-application-installer-package+zip",
    57  	"ait":                      "application/vnd.dvb.ait",
    58  	"ami":                      "application/vnd.amiga.ami",
    59  	"apk":                      "application/vnd.android.package-archive",
    60  	"apng":                     "image/apng",
    61  	"appcache":                 "text/cache-manifest",
    62  	"application":              "application/x-ms-application",
    63  	"apr":                      "application/vnd.lotus-approach",
    64  	"arc":                      "application/x-freearc",
    65  	"arj":                      "application/x-arj",
    66  	"arw":                      "image/x-sony-arw",
    67  	"asc":                      "application/pgp-signature",
    68  	"asf":                      "video/x-ms-asf",
    69  	"asm":                      "text/x-asm",
    70  	"aso":                      "application/vnd.accpac.simply.aso",
    71  	"asx":                      "video/x-ms-asf",
    72  	"atc":                      "application/vnd.acucorp",
    73  	"atom":                     "application/atom+xml",
    74  	"atomcat":                  "application/atomcat+xml",
    75  	"atomsvc":                  "application/atomsvc+xml",
    76  	"atx":                      "application/vnd.antix.game-component",
    77  	"au":                       "audio/basic",
    78  	"avi":                      "video/x-msvideo",
    79  	"aw":                       "application/applixware",
    80  	"azf":                      "application/vnd.airzip.filesecure.azf",
    81  	"azs":                      "application/vnd.airzip.filesecure.azs",
    82  	"azv":                      "image/vnd.airzip.accelerator.azv",
    83  	"azw":                      "application/vnd.amazon.ebook",
    84  	"bat":                      "application/x-msdownload",
    85  	"bcpio":                    "application/x-bcpio",
    86  	"bdf":                      "application/x-font-bdf",
    87  	"bdm":                      "application/vnd.syncml.dm+wbxml",
    88  	"bdoc":                     "application/x-bdoc",
    89  	"bed":                      "application/vnd.realvnc.bed",
    90  	"bh2":                      "application/vnd.fujitsu.oasysprs",
    91  	"bin":                      "application/octet-stream",
    92  	"blb":                      "application/x-blorb",
    93  	"blorb":                    "application/x-blorb",
    94  	"bmi":                      "application/vnd.bmi",
    95  	"bmp":                      "image/x-ms-bmp",
    96  	"book":                     "application/vnd.framemaker",
    97  	"box":                      "application/vnd.previewsystems.box",
    98  	"boz":                      "application/x-bzip2",
    99  	"bpk":                      "application/octet-stream",
   100  	"btif":                     "image/prs.btif",
   101  	"buffer":                   "application/octet-stream",
   102  	"bz":                       "application/x-bzip",
   103  	"bz2":                      "application/x-bzip2",
   104  	"c":                        "text/x-c",
   105  	"c11amc":                   "application/vnd.cluetrust.cartomobile-config",
   106  	"c11amz":                   "application/vnd.cluetrust.cartomobile-config-pkg",
   107  	"c4d":                      "application/vnd.clonk.c4group",
   108  	"c4f":                      "application/vnd.clonk.c4group",
   109  	"c4g":                      "application/vnd.clonk.c4group",
   110  	"c4p":                      "application/vnd.clonk.c4group",
   111  	"c4u":                      "application/vnd.clonk.c4group",
   112  	"cab":                      "application/vnd.ms-cab-compressed",
   113  	"caf":                      "audio/x-caf",
   114  	"cap":                      "application/vnd.tcpdump.pcap",
   115  	"car":                      "application/vnd.curl.car",
   116  	"cat":                      "application/vnd.ms-pki.seccat",
   117  	"cb7":                      "application/x-cbr",
   118  	"cba":                      "application/x-cbr",
   119  	"cbr":                      "application/x-cbr",
   120  	"cbt":                      "application/x-cbr",
   121  	"cbz":                      "application/x-cbr",
   122  	"cc":                       "text/x-c",
   123  	"cco":                      "application/x-cocoa",
   124  	"cct":                      "application/x-director",
   125  	"ccxml":                    "application/ccxml+xml",
   126  	"cdbcmsg":                  "application/vnd.contact.cmsg",
   127  	"cdf":                      "application/x-netcdf",
   128  	"cdkey":                    "application/vnd.mediastation.cdkey",
   129  	"cdmia":                    "application/cdmi-capability",
   130  	"cdmic":                    "application/cdmi-container",
   131  	"cdmid":                    "application/cdmi-domain",
   132  	"cdmio":                    "application/cdmi-object",
   133  	"cdmiq":                    "application/cdmi-queue",
   134  	"cdx":                      "chemical/x-cdx",
   135  	"cdxml":                    "application/vnd.chemdraw+xml",
   136  	"cdy":                      "application/vnd.cinderella",
   137  	"cer":                      "application/pkix-cert",
   138  	"cfs":                      "application/x-cfs-compressed",
   139  	"cgm":                      "image/cgm",
   140  	"chat":                     "application/x-chat",
   141  	"chm":                      "application/vnd.ms-htmlhelp",
   142  	"chrt":                     "application/vnd.kde.kchart",
   143  	"cif":                      "chemical/x-cif",
   144  	"cii":                      "application/vnd.anser-web-certificate-issue-initiation",
   145  	"cil":                      "application/vnd.ms-artgalry",
   146  	"cla":                      "application/vnd.claymore",
   147  	"class":                    "application/java-vm",
   148  	"clkk":                     "application/vnd.crick.clicker.keyboard",
   149  	"clkp":                     "application/vnd.crick.clicker.palette",
   150  	"clkt":                     "application/vnd.crick.clicker.template",
   151  	"clkw":                     "application/vnd.crick.clicker.wordbank",
   152  	"clkx":                     "application/vnd.crick.clicker",
   153  	"clp":                      "application/x-msclip",
   154  	"cmc":                      "application/vnd.cosmocaller",
   155  	"cmdf":                     "chemical/x-cmdf",
   156  	"cml":                      "chemical/x-cml",
   157  	"cmp":                      "application/vnd.yellowriver-custom-menu",
   158  	"cmx":                      "image/x-cmx",
   159  	"cod":                      "application/vnd.rim.cod",
   160  	"coffee":                   "text/coffeescript",
   161  	"com":                      "application/x-msdownload",
   162  	"conf":                     "text/plain",
   163  	"cpio":                     "application/x-cpio",
   164  	"cpp":                      "text/x-c",
   165  	"cpt":                      "application/mac-compactpro",
   166  	"cr2":                      "image/x-canon-cr2",
   167  	"crd":                      "application/x-mscardfile",
   168  	"crl":                      "application/pkix-crl",
   169  	"crt":                      "application/x-x509-ca-cert",
   170  	"crw":                      "image/x-canon-crw",
   171  	"crx":                      "application/x-chrome-extension",
   172  	"cryptonote":               "application/vnd.rig.cryptonote",
   173  	"csh":                      "application/x-csh",
   174  	"csl":                      "application/vnd.citationstyles.style+xml",
   175  	"csml":                     "chemical/x-csml",
   176  	"csp":                      "application/vnd.commonspace",
   177  	"css":                      "text/css",
   178  	"cst":                      "application/x-director",
   179  	"csv":                      "text/csv",
   180  	"cu":                       "application/cu-seeme",
   181  	"curl":                     "text/vnd.curl",
   182  	"cww":                      "application/prs.cww",
   183  	"cxt":                      "application/x-director",
   184  	"cxx":                      "text/x-c",
   185  	"dae":                      "model/vnd.collada+xml",
   186  	"daf":                      "application/vnd.mobius.daf",
   187  	"dart":                     "application/vnd.dart",
   188  	"dataless":                 "application/vnd.fdsn.seed",
   189  	"davmount":                 "application/davmount+xml",
   190  	"dbk":                      "application/docbook+xml",
   191  	"dcr":                      "application/x-director",
   192  	"dcurl":                    "text/vnd.curl.dcurl",
   193  	"dd2":                      "application/vnd.oma.dd2+xml",
   194  	"ddd":                      "application/vnd.fujixerox.ddd",
   195  	"deb":                      "application/x-debian-package",
   196  	"def":                      "text/plain",
   197  	"deploy":                   "application/octet-stream",
   198  	"der":                      "application/x-x509-ca-cert",
   199  	"dfac":                     "application/vnd.dreamfactory",
   200  	"dgc":                      "application/x-dgc-compressed",
   201  	"dic":                      "text/x-c",
   202  	"dir":                      "application/x-director",
   203  	"dis":                      "application/vnd.mobius.dis",
   204  	"disposition-notification": "message/disposition-notification",
   205  	"dist":                     "application/octet-stream",
   206  	"distz":                    "application/octet-stream",
   207  	"djv":                      "image/vnd.djvu",
   208  	"djvu":                     "image/vnd.djvu",
   209  	"dll":                      "application/x-msdownload",
   210  	"dmg":                      "application/x-apple-diskimage",
   211  	"dmp":                      "application/vnd.tcpdump.pcap",
   212  	"dms":                      "application/octet-stream",
   213  	"dna":                      "application/vnd.dna",
   214  	"dng":                      "image/x-adobe-dng",
   215  	"doc":                      "application/msword",
   216  	"docm":                     "application/vnd.ms-word.document.macroenabled.12",
   217  	"docx":                     "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
   218  	"docxf":                    "application/vnd.openxmlformats-officedocument.wordprocessingml.form",
   219  	"dot":                      "application/msword",
   220  	"dotm":                     "application/vnd.ms-word.template.macroenabled.12",
   221  	"dotx":                     "application/vnd.openxmlformats-officedocument.wordprocessingml.template",
   222  	"dp":                       "application/vnd.osgi.dp",
   223  	"dpg":                      "application/vnd.dpgraph",
   224  	"dra":                      "audio/vnd.dra",
   225  	"drle":                     "image/dicom-rle",
   226  	"dsc":                      "text/prs.lines.tag",
   227  	"dssc":                     "application/dssc+der",
   228  	"dtb":                      "application/x-dtbook+xml",
   229  	"dtd":                      "application/xml-dtd",
   230  	"dts":                      "audio/vnd.dts",
   231  	"dtshd":                    "audio/vnd.dts.hd",
   232  	"dump":                     "application/octet-stream",
   233  	"dvb":                      "video/vnd.dvb.file",
   234  	"dvi":                      "application/x-dvi",
   235  	"dwf":                      "model/vnd.dwf",
   236  	"dwg":                      "image/vnd.dwg",
   237  	"dxf":                      "image/vnd.dxf",
   238  	"dxp":                      "application/vnd.spotfire.dxp",
   239  	"dxr":                      "application/x-director",
   240  	"ear":                      "application/java-archive",
   241  	"ecelp4800":                "audio/vnd.nuera.ecelp4800",
   242  	"ecelp7470":                "audio/vnd.nuera.ecelp7470",
   243  	"ecelp9600":                "audio/vnd.nuera.ecelp9600",
   244  	"ecma":                     "application/ecmascript",
   245  	"edm":                      "application/vnd.novadigm.edm",
   246  	"edx":                      "application/vnd.novadigm.edx",
   247  	"efif":                     "application/vnd.picsel",
   248  	"ei6":                      "application/vnd.pg.osasli",
   249  	"elc":                      "application/octet-stream",
   250  	"emf":                      "image/emf",
   251  	"eml":                      "message/rfc822",
   252  	"emma":                     "application/emma+xml",
   253  	"emz":                      "application/x-msmetafile",
   254  	"eol":                      "audio/vnd.digital-winds",
   255  	"eot":                      "application/vnd.ms-fontobject",
   256  	"eps":                      "application/postscript",
   257  	"epub":                     "application/epub+zip",
   258  	"erf":                      "image/x-epson-erf",
   259  	"es":                       "application/ecmascript",
   260  	"es3":                      "application/vnd.eszigno3+xml",
   261  	"esa":                      "application/vnd.osgi.subsystem",
   262  	"esf":                      "application/vnd.epson.esf",
   263  	"et3":                      "application/vnd.eszigno3+xml",
   264  	"etx":                      "text/x-setext",
   265  	"eva":                      "application/x-eva",
   266  	"evy":                      "application/x-envoy",
   267  	"exe":                      "application/x-msdownload",
   268  	"exi":                      "application/exi",
   269  	"exr":                      "image/aces",
   270  	"ext":                      "application/vnd.novadigm.ext",
   271  	"ez":                       "application/andrew-inset",
   272  	"ez2":                      "application/vnd.ezpix-album",
   273  	"ez3":                      "application/vnd.ezpix-package",
   274  	"f":                        "text/x-fortran",
   275  	"f4v":                      "video/x-f4v",
   276  	"f77":                      "text/x-fortran",
   277  	"f90":                      "text/x-fortran",
   278  	"fbs":                      "image/vnd.fastbidsheet",
   279  	"fcdt":                     "application/vnd.adobe.formscentral.fcdt",
   280  	"fcs":                      "application/vnd.isac.fcs",
   281  	"fdf":                      "application/vnd.fdf",
   282  	"fe_launch":                "application/vnd.denovo.fcselayout-link",
   283  	"fg5":                      "application/vnd.fujitsu.oasysgp",
   284  	"fgd":                      "application/x-director",
   285  	"fh":                       "image/x-freehand",
   286  	"fh4":                      "image/x-freehand",
   287  	"fh5":                      "image/x-freehand",
   288  	"fh7":                      "image/x-freehand",
   289  	"fhc":                      "image/x-freehand",
   290  	"fig":                      "application/x-xfig",
   291  	"fits":                     "image/fits",
   292  	"flac":                     "audio/x-flac",
   293  	"fli":                      "video/x-fli",
   294  	"flo":                      "application/vnd.micrografx.flo",
   295  	"flv":                      "video/x-flv",
   296  	"flw":                      "application/vnd.kde.kivio",
   297  	"flx":                      "text/vnd.fmi.flexstor",
   298  	"fly":                      "text/vnd.fly",
   299  	"fm":                       "application/vnd.framemaker",
   300  	"fnc":                      "application/vnd.frogans.fnc",
   301  	"for":                      "text/x-fortran",
   302  	"fpx":                      "image/vnd.fpx",
   303  	"frame":                    "application/vnd.framemaker",
   304  	"fsc":                      "application/vnd.fsc.weblaunch",
   305  	"fst":                      "image/vnd.fst",
   306  	"ftc":                      "application/vnd.fluxtime.clip",
   307  	"fti":                      "application/vnd.anser-web-funds-transfer-initiation",
   308  	"fvt":                      "video/vnd.fvt",
   309  	"fxp":                      "application/vnd.adobe.fxp",
   310  	"fxpl":                     "application/vnd.adobe.fxp",
   311  	"fzs":                      "application/vnd.fuzzysheet",
   312  	"g2w":                      "application/vnd.geoplan",
   313  	"g3":                       "image/g3fax",
   314  	"g3w":                      "application/vnd.geospace",
   315  	"gac":                      "application/vnd.groove-account",
   316  	"gam":                      "application/x-tads",
   317  	"gbr":                      "application/rpki-ghostbusters",
   318  	"gca":                      "application/x-gca-compressed",
   319  	"gdl":                      "model/vnd.gdl",
   320  	"gdoc":                     "application/vnd.google-apps.document",
   321  	"geo":                      "application/vnd.dynageo",
   322  	"geojson":                  "application/geo+json",
   323  	"gex":                      "application/vnd.geometry-explorer",
   324  	"ggb":                      "application/vnd.geogebra.file",
   325  	"ggp":                      "application/vnd.geogebra.pinboard",
   326  	"ggs":                      "application/vnd.geogebra.slides",
   327  	"ggt":                      "application/vnd.geogebra.tool",
   328  	"ghf":                      "application/vnd.groove-help",
   329  	"gif":                      "image/gif",
   330  	"gim":                      "application/vnd.groove-identity-message",
   331  	"glb":                      "model/gltf-binary",
   332  	"gltf":                     "model/gltf+json",
   333  	"gml":                      "application/gml+xml",
   334  	"gmx":                      "application/vnd.gmx",
   335  	"gnumeric":                 "application/x-gnumeric",
   336  	"gph":                      "application/vnd.flographit",
   337  	"gpx":                      "application/gpx+xml",
   338  	"gqf":                      "application/vnd.grafeq",
   339  	"gqs":                      "application/vnd.grafeq",
   340  	"gram":                     "application/srgs",
   341  	"gramps":                   "application/x-gramps-xml",
   342  	"gre":                      "application/vnd.geometry-explorer",
   343  	"grv":                      "application/vnd.groove-injector",
   344  	"grxml":                    "application/srgs+xml",
   345  	"gsf":                      "application/x-font-ghostscript",
   346  	"gsheet":                   "application/vnd.google-apps.spreadsheet",
   347  	"gslides":                  "application/vnd.google-apps.presentation",
   348  	"gtar":                     "application/x-gtar",
   349  	"gtm":                      "application/vnd.groove-tool-message",
   350  	"gtw":                      "model/vnd.gtw",
   351  	"gv":                       "text/vnd.graphviz",
   352  	"gxf":                      "application/gxf",
   353  	"gxt":                      "application/vnd.geonext",
   354  	"gz":                       "application/gzip",
   355  	"h":                        "text/x-c",
   356  	"h261":                     "video/h261",
   357  	"h263":                     "video/h263",
   358  	"h264":                     "video/h264",
   359  	"hal":                      "application/vnd.hal+xml",
   360  	"hbci":                     "application/vnd.hbci",
   361  	"hbs":                      "text/x-handlebars-template",
   362  	"hdd":                      "application/x-virtualbox-hdd",
   363  	"hdf":                      "application/x-hdf",
   364  	"heic":                     "image/heic",
   365  	"heics":                    "image/heic-sequence",
   366  	"heif":                     "image/heif",
   367  	"heifs":                    "image/heif-sequence",
   368  	"hh":                       "text/x-c",
   369  	"hjson":                    "application/hjson",
   370  	"hlp":                      "application/winhlp",
   371  	"hpgl":                     "application/vnd.hp-hpgl",
   372  	"hpid":                     "application/vnd.hp-hpid",
   373  	"hps":                      "application/vnd.hp-hps",
   374  	"hqx":                      "application/mac-binhex40",
   375  	"htc":                      "text/x-component",
   376  	"htke":                     "application/vnd.kenameaapp",
   377  	"htm":                      "text/html",
   378  	"html":                     "text/html",
   379  	"hvd":                      "application/vnd.yamaha.hv-dic",
   380  	"hvp":                      "application/vnd.yamaha.hv-voice",
   381  	"hvs":                      "application/vnd.yamaha.hv-script",
   382  	"i2g":                      "application/vnd.intergeo",
   383  	"icc":                      "application/vnd.iccprofile",
   384  	"ice":                      "x-conference/x-cooltalk",
   385  	"icm":                      "application/vnd.iccprofile",
   386  	"ico":                      "image/x-icon",
   387  	"ics":                      "text/calendar",
   388  	"ief":                      "image/ief",
   389  	"ifb":                      "text/calendar",
   390  	"ifm":                      "application/vnd.shana.informed.formdata",
   391  	"iges":                     "model/iges",
   392  	"igl":                      "application/vnd.igloader",
   393  	"igm":                      "application/vnd.insors.igm",
   394  	"igs":                      "model/iges",
   395  	"igx":                      "application/vnd.micrografx.igx",
   396  	"iif":                      "application/vnd.shana.informed.interchange",
   397  	"img":                      "application/octet-stream",
   398  	"imp":                      "application/vnd.accpac.simply.imp",
   399  	"ims":                      "application/vnd.ms-ims",
   400  	"in":                       "text/plain",
   401  	"ini":                      "text/plain",
   402  	"ink":                      "application/inkml+xml",
   403  	"inkml":                    "application/inkml+xml",
   404  	"install":                  "application/x-install-instructions",
   405  	"iota":                     "application/vnd.astraea-software.iota",
   406  	"ipfix":                    "application/ipfix",
   407  	"ipk":                      "application/vnd.shana.informed.package",
   408  	"irm":                      "application/vnd.ibm.rights-management",
   409  	"irp":                      "application/vnd.irepository.package+xml",
   410  	"iso":                      "application/x-iso9660-image",
   411  	"itp":                      "application/vnd.shana.informed.formtemplate",
   412  	"ivp":                      "application/vnd.immervision-ivp",
   413  	"ivu":                      "application/vnd.immervision-ivu",
   414  	"jad":                      "text/vnd.sun.j2me.app-descriptor",
   415  	"jade":                     "text/jade",
   416  	"jam":                      "application/vnd.jam",
   417  	"jar":                      "application/java-archive",
   418  	"jardiff":                  "application/x-java-archive-diff",
   419  	"java":                     "text/x-java-source",
   420  	"jisp":                     "application/vnd.jisp",
   421  	"jls":                      "image/jls",
   422  	"jlt":                      "application/vnd.hp-jlyt",
   423  	"jng":                      "image/x-jng",
   424  	"jnlp":                     "application/x-java-jnlp-file",
   425  	"joda":                     "application/vnd.joost.joda-archive",
   426  	"jp2":                      "image/jp2",
   427  	"jpe":                      "image/jpeg",
   428  	"jpeg":                     "image/jpeg",
   429  	"jpf":                      "image/jpx",
   430  	"jpg":                      "image/jpeg",
   431  	"jpg2":                     "image/jp2",
   432  	"jpgm":                     "video/jpm",
   433  	"jpgv":                     "video/jpeg",
   434  	"jpm":                      "video/jpm",
   435  	"jpx":                      "image/jpx",
   436  	"js":                       "application/javascript",
   437  	"json":                     "application/json",
   438  	"json5":                    "application/json5",
   439  	"jsonld":                   "application/ld+json",
   440  	"jsonml":                   "application/jsonml+json",
   441  	"jsx":                      "text/jsx",
   442  	"k25":                      "image/x-kodak-k25",
   443  	"kar":                      "audio/midi",
   444  	"karbon":                   "application/vnd.kde.karbon",
   445  	"kdc":                      "image/x-kodak-kdc",
   446  	"keynote":                  "application/vnd.apple.keynote",
   447  	"kfo":                      "application/vnd.kde.kformula",
   448  	"kia":                      "application/vnd.kidspiration",
   449  	"kml":                      "application/vnd.google-earth.kml+xml",
   450  	"kmz":                      "application/vnd.google-earth.kmz",
   451  	"kne":                      "application/vnd.kinar",
   452  	"knp":                      "application/vnd.kinar",
   453  	"kon":                      "application/vnd.kde.kontour",
   454  	"kpr":                      "application/vnd.kde.kpresenter",
   455  	"kpt":                      "application/vnd.kde.kpresenter",
   456  	"kpxx":                     "application/vnd.ds-keypoint",
   457  	"ksp":                      "application/vnd.kde.kspread",
   458  	"ktr":                      "application/vnd.kahootz",
   459  	"ktx":                      "image/ktx",
   460  	"ktz":                      "application/vnd.kahootz",
   461  	"kwd":                      "application/vnd.kde.kword",
   462  	"kwt":                      "application/vnd.kde.kword",
   463  	"lasxml":                   "application/vnd.las.las+xml",
   464  	"latex":                    "application/x-latex",
   465  	"lbd":                      "application/vnd.llamagraphics.life-balance.desktop",
   466  	"lbe":                      "application/vnd.llamagraphics.life-balance.exchange+xml",
   467  	"les":                      "application/vnd.hhe.lesson-player",
   468  	"less":                     "text/less",
   469  	"lha":                      "application/x-lzh-compressed",
   470  	"link66":                   "application/vnd.route66.link66+xml",
   471  	"list":                     "text/plain",
   472  	"list3820":                 "application/vnd.ibm.modcap",
   473  	"listafp":                  "application/vnd.ibm.modcap",
   474  	"litcoffee":                "text/coffeescript",
   475  	"lnk":                      "application/x-ms-shortcut",
   476  	"log":                      "text/plain",
   477  	"lostxml":                  "application/lost+xml",
   478  	"lrf":                      "application/octet-stream",
   479  	"lrm":                      "application/vnd.ms-lrm",
   480  	"ltf":                      "application/vnd.frogans.ltf",
   481  	"lua":                      "text/x-lua",
   482  	"luac":                     "application/x-lua-bytecode",
   483  	"lvp":                      "audio/vnd.lucent.voice",
   484  	"lwp":                      "application/vnd.lotus-wordpro",
   485  	"lzh":                      "application/x-lzh-compressed",
   486  	"m13":                      "application/x-msmediaview",
   487  	"m14":                      "application/x-msmediaview",
   488  	"m1v":                      "video/mpeg",
   489  	"m21":                      "application/mp21",
   490  	"m2a":                      "audio/mpeg",
   491  	"m2v":                      "video/mpeg",
   492  	"m3a":                      "audio/mpeg",
   493  	"m3u":                      "audio/x-mpegurl",
   494  	"m3u8":                     "application/vnd.apple.mpegurl",
   495  	"m4a":                      "audio/x-m4a",
   496  	"m4p":                      "application/mp4",
   497  	"m4u":                      "video/vnd.mpegurl",
   498  	"m4v":                      "video/x-m4v",
   499  	"ma":                       "application/mathematica",
   500  	"mads":                     "application/mads+xml",
   501  	"mag":                      "application/vnd.ecowin.chart",
   502  	"maker":                    "application/vnd.framemaker",
   503  	"man":                      "text/troff",
   504  	"manifest":                 "text/cache-manifest",
   505  	"map":                      "application/json",
   506  	"mar":                      "application/octet-stream",
   507  	"markdown":                 "text/markdown",
   508  	"mathml":                   "application/mathml+xml",
   509  	"mb":                       "application/mathematica",
   510  	"mbk":                      "application/vnd.mobius.mbk",
   511  	"mbox":                     "application/mbox",
   512  	"mc1":                      "application/vnd.medcalcdata",
   513  	"mcd":                      "application/vnd.mcd",
   514  	"mcurl":                    "text/vnd.curl.mcurl",
   515  	"md":                       "text/markdown",
   516  	"mdb":                      "application/x-msaccess",
   517  	"mdi":                      "image/vnd.ms-modi",
   518  	"me":                       "text/troff",
   519  	"mesh":                     "model/mesh",
   520  	"meta4":                    "application/metalink4+xml",
   521  	"metalink":                 "application/metalink+xml",
   522  	"mets":                     "application/mets+xml",
   523  	"mfm":                      "application/vnd.mfmp",
   524  	"mft":                      "application/rpki-manifest",
   525  	"mgp":                      "application/vnd.osgeo.mapguide.package",
   526  	"mgz":                      "application/vnd.proteus.magazine",
   527  	"mid":                      "audio/midi",
   528  	"midi":                     "audio/midi",
   529  	"mie":                      "application/x-mie",
   530  	"mif":                      "application/vnd.mif",
   531  	"mime":                     "message/rfc822",
   532  	"mj2":                      "video/mj2",
   533  	"mjp2":                     "video/mj2",
   534  	"mjs":                      "application/javascript",
   535  	"mk3d":                     "video/x-matroska",
   536  	"mka":                      "audio/x-matroska",
   537  	"mkd":                      "text/x-markdown",
   538  	"mks":                      "video/x-matroska",
   539  	"mkv":                      "video/x-matroska",
   540  	"mlp":                      "application/vnd.dolby.mlp",
   541  	"mmd":                      "application/vnd.chipnuts.karaoke-mmd",
   542  	"mmf":                      "application/vnd.smaf",
   543  	"mml":                      "text/mathml",
   544  	"mmr":                      "image/vnd.fujixerox.edmics-mmr",
   545  	"mng":                      "video/x-mng",
   546  	"mny":                      "application/x-msmoney",
   547  	"mobi":                     "application/x-mobipocket-ebook",
   548  	"mods":                     "application/mods+xml",
   549  	"mov":                      "video/quicktime",
   550  	"movie":                    "video/x-sgi-movie",
   551  	"mp2":                      "audio/mpeg",
   552  	"mp21":                     "application/mp21",
   553  	"mp2a":                     "audio/mpeg",
   554  	"mp3":                      "audio/mpeg",
   555  	"mp4":                      "video/mp4",
   556  	"mp4a":                     "audio/mp4",
   557  	"mp4s":                     "application/mp4",
   558  	"mp4v":                     "video/mp4",
   559  	"mpc":                      "application/vnd.mophun.certificate",
   560  	"mpd":                      "application/dash+xml",
   561  	"mpe":                      "video/mpeg",
   562  	"mpeg":                     "video/mpeg",
   563  	"mpg":                      "video/mpeg",
   564  	"mpg4":                     "video/mp4",
   565  	"mpga":                     "audio/mpeg",
   566  	"mpkg":                     "application/vnd.apple.installer+xml",
   567  	"mpm":                      "application/vnd.blueice.multipass",
   568  	"mpn":                      "application/vnd.mophun.application",
   569  	"mpp":                      "application/vnd.ms-project",
   570  	"mpt":                      "application/vnd.ms-project",
   571  	"mpy":                      "application/vnd.ibm.minipay",
   572  	"mqy":                      "application/vnd.mobius.mqy",
   573  	"mrc":                      "application/marc",
   574  	"mrcx":                     "application/marcxml+xml",
   575  	"mrw":                      "image/x-minolta-mrw",
   576  	"ms":                       "text/troff",
   577  	"mscml":                    "application/mediaservercontrol+xml",
   578  	"mseed":                    "application/vnd.fdsn.mseed",
   579  	"mseq":                     "application/vnd.mseq",
   580  	"msf":                      "application/vnd.epson.msf",
   581  	"msg":                      "application/vnd.ms-outlook",
   582  	"msh":                      "model/mesh",
   583  	"msi":                      "application/x-msdownload",
   584  	"msl":                      "application/vnd.mobius.msl",
   585  	"msm":                      "application/octet-stream",
   586  	"msp":                      "application/octet-stream",
   587  	"msty":                     "application/vnd.muvee.style",
   588  	"mts":                      "model/vnd.mts",
   589  	"mus":                      "application/vnd.musician",
   590  	"musicxml":                 "application/vnd.recordare.musicxml+xml",
   591  	"mvb":                      "application/x-msmediaview",
   592  	"mwf":                      "application/vnd.mfer",
   593  	"mxf":                      "application/mxf",
   594  	"mxl":                      "application/vnd.recordare.musicxml",
   595  	"mxml":                     "application/xv+xml",
   596  	"mxs":                      "application/vnd.triscape.mxs",
   597  	"mxu":                      "video/vnd.mpegurl",
   598  	"n-gage":                   "application/vnd.nokia.n-gage.symbian.install",
   599  	"n3":                       "text/n3",
   600  	"nb":                       "application/mathematica",
   601  	"nbp":                      "application/vnd.wolfram.player",
   602  	"nc":                       "application/x-netcdf",
   603  	"ncx":                      "application/x-dtbncx+xml",
   604  	"nef":                      "image/x-nikon-nef",
   605  	"nfo":                      "text/x-nfo",
   606  	"ngdat":                    "application/vnd.nokia.n-gage.data",
   607  	"nitf":                     "application/vnd.nitf",
   608  	"nlu":                      "application/vnd.neurolanguage.nlu",
   609  	"nml":                      "application/vnd.enliven",
   610  	"nnd":                      "application/vnd.noblenet-directory",
   611  	"nns":                      "application/vnd.noblenet-sealer",
   612  	"nnw":                      "application/vnd.noblenet-web",
   613  	"npx":                      "image/vnd.net-fpx",
   614  	"nsc":                      "application/x-conference",
   615  	"nsf":                      "application/vnd.lotus-notes",
   616  	"ntf":                      "application/vnd.nitf",
   617  	"numbers":                  "application/vnd.apple.numbers",
   618  	"nzb":                      "application/x-nzb",
   619  	"oa2":                      "application/vnd.fujitsu.oasys2",
   620  	"oa3":                      "application/vnd.fujitsu.oasys3",
   621  	"oas":                      "application/vnd.fujitsu.oasys",
   622  	"obd":                      "application/x-msbinder",
   623  	"obj":                      "application/x-tgif",
   624  	"oda":                      "application/oda",
   625  	"odb":                      "application/vnd.oasis.opendocument.database",
   626  	"odc":                      "application/vnd.oasis.opendocument.chart",
   627  	"odf":                      "application/vnd.oasis.opendocument.formula",
   628  	"odft":                     "application/vnd.oasis.opendocument.formula-template",
   629  	"odg":                      "application/vnd.oasis.opendocument.graphics",
   630  	"odi":                      "application/vnd.oasis.opendocument.image",
   631  	"odm":                      "application/vnd.oasis.opendocument.text-master",
   632  	"odp":                      "application/vnd.oasis.opendocument.presentation",
   633  	"ods":                      "application/vnd.oasis.opendocument.spreadsheet",
   634  	"odt":                      "application/vnd.oasis.opendocument.text",
   635  	"oform":                    "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
   636  	"oga":                      "audio/ogg",
   637  	"ogg":                      "audio/ogg",
   638  	"ogv":                      "video/ogg",
   639  	"ogx":                      "application/ogg",
   640  	"omdoc":                    "application/omdoc+xml",
   641  	"onepkg":                   "application/onenote",
   642  	"onetmp":                   "application/onenote",
   643  	"onetoc":                   "application/onenote",
   644  	"onetoc2":                  "application/onenote",
   645  	"opf":                      "application/oebps-package+xml",
   646  	"opml":                     "text/x-opml",
   647  	"oprc":                     "application/vnd.palm",
   648  	"orf":                      "image/x-olympus-orf",
   649  	"org":                      "text/x-org",
   650  	"osf":                      "application/vnd.yamaha.openscoreformat",
   651  	"osfpvg":                   "application/vnd.yamaha.openscoreformat.osfpvg+xml",
   652  	"otc":                      "application/vnd.oasis.opendocument.chart-template",
   653  	"otf":                      "font/otf",
   654  	"otg":                      "application/vnd.oasis.opendocument.graphics-template",
   655  	"oth":                      "application/vnd.oasis.opendocument.text-web",
   656  	"oti":                      "application/vnd.oasis.opendocument.image-template",
   657  	"otp":                      "application/vnd.oasis.opendocument.presentation-template",
   658  	"ots":                      "application/vnd.oasis.opendocument.spreadsheet-template",
   659  	"ott":                      "application/vnd.oasis.opendocument.text-template",
   660  	"ova":                      "application/x-virtualbox-ova",
   661  	"ovf":                      "application/x-virtualbox-ovf",
   662  	"owl":                      "application/rdf+xml",
   663  	"oxps":                     "application/oxps",
   664  	"oxt":                      "application/vnd.openofficeorg.extension",
   665  	"p":                        "text/x-pascal",
   666  	"p10":                      "application/pkcs10",
   667  	"p12":                      "application/x-pkcs12",
   668  	"p7b":                      "application/x-pkcs7-certificates",
   669  	"p7c":                      "application/pkcs7-mime",
   670  	"p7m":                      "application/pkcs7-mime",
   671  	"p7r":                      "application/x-pkcs7-certreqresp",
   672  	"p7s":                      "application/pkcs7-signature",
   673  	"p8":                       "application/pkcs8",
   674  	"pac":                      "application/x-ns-proxy-autoconfig",
   675  	"pages":                    "application/vnd.apple.pages",
   676  	"pas":                      "text/x-pascal",
   677  	"paw":                      "application/vnd.pawaafile",
   678  	"pbd":                      "application/vnd.powerbuilder6",
   679  	"pbm":                      "image/x-portable-bitmap",
   680  	"pcap":                     "application/vnd.tcpdump.pcap",
   681  	"pcf":                      "application/x-font-pcf",
   682  	"pcl":                      "application/vnd.hp-pcl",
   683  	"pclxl":                    "application/vnd.hp-pclxl",
   684  	"pct":                      "image/x-pict",
   685  	"pcurl":                    "application/vnd.curl.pcurl",
   686  	"pcx":                      "image/x-pcx",
   687  	"pdb":                      "application/x-pilot",
   688  	"pde":                      "text/x-processing",
   689  	"pdf":                      "application/pdf",
   690  	"pef":                      "image/x-pentax-pef",
   691  	"pem":                      "application/x-x509-ca-cert",
   692  	"pfa":                      "application/x-font-type1",
   693  	"pfb":                      "application/x-font-type1",
   694  	"pfm":                      "application/x-font-type1",
   695  	"pfr":                      "application/font-tdpfr",
   696  	"pfx":                      "application/x-pkcs12",
   697  	"pgm":                      "image/x-portable-graymap",
   698  	"pgn":                      "application/x-chess-pgn",
   699  	"pgp":                      "application/pgp-encrypted",
   700  	"php":                      "application/x-httpd-php",
   701  	"pic":                      "image/x-pict",
   702  	"pkg":                      "application/octet-stream",
   703  	"pki":                      "application/pkixcmp",
   704  	"pkipath":                  "application/pkix-pkipath",
   705  	"pkpass":                   "application/vnd.apple.pkpass",
   706  	"pl":                       "application/x-perl",
   707  	"plb":                      "application/vnd.3gpp.pic-bw-large",
   708  	"plc":                      "application/vnd.mobius.plc",
   709  	"plf":                      "application/vnd.pocketlearn",
   710  	"pls":                      "application/pls+xml",
   711  	"pm":                       "application/x-perl",
   712  	"pml":                      "application/vnd.ctc-posml",
   713  	"png":                      "image/png",
   714  	"pnm":                      "image/x-portable-anymap",
   715  	"portpkg":                  "application/vnd.macports.portpkg",
   716  	"pot":                      "application/vnd.ms-powerpoint",
   717  	"potm":                     "application/vnd.ms-powerpoint.template.macroenabled.12",
   718  	"potx":                     "application/vnd.openxmlformats-officedocument.presentationml.template",
   719  	"ppam":                     "application/vnd.ms-powerpoint.addin.macroenabled.12",
   720  	"ppd":                      "application/vnd.cups-ppd",
   721  	"ppm":                      "image/x-portable-pixmap",
   722  	"pps":                      "application/vnd.ms-powerpoint",
   723  	"ppsm":                     "application/vnd.ms-powerpoint.slideshow.macroenabled.12",
   724  	"ppsx":                     "application/vnd.openxmlformats-officedocument.presentationml.slideshow",
   725  	"ppt":                      "application/vnd.ms-powerpoint",
   726  	"pptm":                     "application/vnd.ms-powerpoint.presentation.macroenabled.12",
   727  	"pptx":                     "application/vnd.openxmlformats-officedocument.presentationml.presentation",
   728  	"pqa":                      "application/vnd.palm",
   729  	"prc":                      "application/x-pilot",
   730  	"pre":                      "application/vnd.lotus-freelance",
   731  	"prf":                      "application/pics-rules",
   732  	"ps":                       "application/postscript",
   733  	"psb":                      "application/vnd.3gpp.pic-bw-small",
   734  	"psd":                      "image/vnd.adobe.photoshop",
   735  	"psf":                      "application/x-font-linux-psf",
   736  	"pskcxml":                  "application/pskc+xml",
   737  	"pti":                      "image/prs.pti",
   738  	"ptid":                     "application/vnd.pvi.ptid1",
   739  	"pub":                      "application/x-mspublisher",
   740  	"pvb":                      "application/vnd.3gpp.pic-bw-var",
   741  	"pwn":                      "application/vnd.3m.post-it-notes",
   742  	"pya":                      "audio/vnd.ms-playready.media.pya",
   743  	"pyv":                      "video/vnd.ms-playready.media.pyv",
   744  	"qam":                      "application/vnd.epson.quickanime",
   745  	"qbo":                      "application/vnd.intu.qbo",
   746  	"qfx":                      "application/vnd.intu.qfx",
   747  	"qps":                      "application/vnd.publishare-delta-tree",
   748  	"qt":                       "video/quicktime",
   749  	"qwd":                      "application/vnd.quark.quarkxpress",
   750  	"qwt":                      "application/vnd.quark.quarkxpress",
   751  	"qxb":                      "application/vnd.quark.quarkxpress",
   752  	"qxd":                      "application/vnd.quark.quarkxpress",
   753  	"qxl":                      "application/vnd.quark.quarkxpress",
   754  	"qxt":                      "application/vnd.quark.quarkxpress",
   755  	"ra":                       "audio/x-realaudio",
   756  	"raf":                      "image/x-fuji-raf",
   757  	"ram":                      "audio/x-pn-realaudio",
   758  	"raml":                     "application/raml+yaml",
   759  	"rar":                      "application/x-rar-compressed",
   760  	"ras":                      "image/x-cmu-raster",
   761  	"raw":                      "image/x-panasonic-raw",
   762  	"rcprofile":                "application/vnd.ipunplugged.rcprofile",
   763  	"rdf":                      "application/rdf+xml",
   764  	"rdz":                      "application/vnd.data-vision.rdz",
   765  	"rep":                      "application/vnd.businessobjects",
   766  	"res":                      "application/x-dtbresource+xml",
   767  	"rgb":                      "image/x-rgb",
   768  	"rif":                      "application/reginfo+xml",
   769  	"rip":                      "audio/vnd.rip",
   770  	"ris":                      "application/x-research-info-systems",
   771  	"rl":                       "application/resource-lists+xml",
   772  	"rlc":                      "image/vnd.fujixerox.edmics-rlc",
   773  	"rld":                      "application/resource-lists-diff+xml",
   774  	"rm":                       "application/vnd.rn-realmedia",
   775  	"rmi":                      "audio/midi",
   776  	"rmp":                      "audio/x-pn-realaudio-plugin",
   777  	"rms":                      "application/vnd.jcp.javame.midlet-rms",
   778  	"rmvb":                     "application/vnd.rn-realmedia-vbr",
   779  	"rnc":                      "application/relax-ng-compact-syntax",
   780  	"rng":                      "application/xml",
   781  	"roa":                      "application/rpki-roa",
   782  	"roff":                     "text/troff",
   783  	"rp9":                      "application/vnd.cloanto.rp9",
   784  	"rpm":                      "application/x-redhat-package-manager",
   785  	"rpss":                     "application/vnd.nokia.radio-presets",
   786  	"rpst":                     "application/vnd.nokia.radio-preset",
   787  	"rq":                       "application/sparql-query",
   788  	"rs":                       "application/rls-services+xml",
   789  	"rsd":                      "application/rsd+xml",
   790  	"rss":                      "application/rss+xml",
   791  	"rtf":                      "text/rtf",
   792  	"rtx":                      "text/richtext",
   793  	"run":                      "application/x-makeself",
   794  	"s":                        "text/x-asm",
   795  	"s3m":                      "audio/s3m",
   796  	"saf":                      "application/vnd.yamaha.smaf-audio",
   797  	"sass":                     "text/x-sass",
   798  	"sb3":                      "application/x.scratch.sb3",
   799  	"sbml":                     "application/sbml+xml",
   800  	"sc":                       "application/vnd.ibm.secure-container",
   801  	"scd":                      "application/x-msschedule",
   802  	"scm":                      "application/vnd.lotus-screencam",
   803  	"scq":                      "application/scvp-cv-request",
   804  	"scs":                      "application/scvp-cv-response",
   805  	"scss":                     "text/x-scss",
   806  	"scurl":                    "text/vnd.curl.scurl",
   807  	"sda":                      "application/vnd.stardivision.draw",
   808  	"sdc":                      "application/vnd.stardivision.calc",
   809  	"sdd":                      "application/vnd.stardivision.impress",
   810  	"sdkd":                     "application/vnd.solent.sdkm+xml",
   811  	"sdkm":                     "application/vnd.solent.sdkm+xml",
   812  	"sdp":                      "application/sdp",
   813  	"sdw":                      "application/vnd.stardivision.writer",
   814  	"sea":                      "application/x-sea",
   815  	"see":                      "application/vnd.seemail",
   816  	"seed":                     "application/vnd.fdsn.seed",
   817  	"sema":                     "application/vnd.sema",
   818  	"semd":                     "application/vnd.semd",
   819  	"semf":                     "application/vnd.semf",
   820  	"ser":                      "application/java-serialized-object",
   821  	"setpay":                   "application/set-payment-initiation",
   822  	"setreg":                   "application/set-registration-initiation",
   823  	"sfd-hdstx":                "application/vnd.hydrostatix.sof-data",
   824  	"sfs":                      "application/vnd.spotfire.sfs",
   825  	"sfv":                      "text/x-sfv",
   826  	"sgi":                      "image/sgi",
   827  	"sgl":                      "application/vnd.stardivision.writer-global",
   828  	"sgm":                      "text/sgml",
   829  	"sgml":                     "text/sgml",
   830  	"sh":                       "application/x-sh",
   831  	"shar":                     "application/x-shar",
   832  	"shex":                     "text/shex",
   833  	"shf":                      "application/shf+xml",
   834  	"shtml":                    "text/html",
   835  	"sid":                      "image/x-mrsid-image",
   836  	"sig":                      "application/pgp-signature",
   837  	"sil":                      "audio/silk",
   838  	"silo":                     "model/mesh",
   839  	"sis":                      "application/vnd.symbian.install",
   840  	"sisx":                     "application/vnd.symbian.install",
   841  	"sit":                      "application/x-stuffit",
   842  	"sitx":                     "application/x-stuffitx",
   843  	"skd":                      "application/vnd.koan",
   844  	"skm":                      "application/vnd.koan",
   845  	"skp":                      "application/vnd.koan",
   846  	"skt":                      "application/vnd.koan",
   847  	"sldm":                     "application/vnd.ms-powerpoint.slide.macroenabled.12",
   848  	"sldx":                     "application/vnd.openxmlformats-officedocument.presentationml.slide",
   849  	"slim":                     "text/slim",
   850  	"slm":                      "text/slim",
   851  	"slt":                      "application/vnd.epson.salt",
   852  	"sm":                       "application/vnd.stepmania.stepchart",
   853  	"smf":                      "application/vnd.stardivision.math",
   854  	"smi":                      "application/smil+xml",
   855  	"smil":                     "application/smil+xml",
   856  	"smv":                      "video/x-smv",
   857  	"smzip":                    "application/vnd.stepmania.package",
   858  	"snd":                      "audio/basic",
   859  	"snf":                      "application/x-font-snf",
   860  	"so":                       "application/octet-stream",
   861  	"spc":                      "application/x-pkcs7-certificates",
   862  	"spf":                      "application/vnd.yamaha.smaf-phrase",
   863  	"spl":                      "application/x-futuresplash",
   864  	"spot":                     "text/vnd.in3d.spot",
   865  	"spp":                      "application/scvp-vp-response",
   866  	"spq":                      "application/scvp-vp-request",
   867  	"spx":                      "audio/ogg",
   868  	"sql":                      "application/x-sql",
   869  	"sr2":                      "image/x-sony-sr2",
   870  	"src":                      "application/x-wais-source",
   871  	"srf":                      "image/x-sony-srf",
   872  	"srt":                      "application/x-subrip",
   873  	"sru":                      "application/sru+xml",
   874  	"srx":                      "application/sparql-results+xml",
   875  	"ssdl":                     "application/ssdl+xml",
   876  	"sse":                      "application/vnd.kodak-descriptor",
   877  	"ssf":                      "application/vnd.epson.ssf",
   878  	"ssml":                     "application/ssml+xml",
   879  	"st":                       "application/vnd.sailingtracker.track",
   880  	"stc":                      "application/vnd.sun.xml.calc.template",
   881  	"std":                      "application/vnd.sun.xml.draw.template",
   882  	"stf":                      "application/vnd.wt.stf",
   883  	"sti":                      "application/vnd.sun.xml.impress.template",
   884  	"stk":                      "application/hyperstudio",
   885  	"stl":                      "application/vnd.ms-pki.stl",
   886  	"str":                      "application/vnd.pg.format",
   887  	"stw":                      "application/vnd.sun.xml.writer.template",
   888  	"styl":                     "text/stylus",
   889  	"stylus":                   "text/stylus",
   890  	"sub":                      "text/vnd.dvb.subtitle",
   891  	"sus":                      "application/vnd.sus-calendar",
   892  	"susp":                     "application/vnd.sus-calendar",
   893  	"sv4cpio":                  "application/x-sv4cpio",
   894  	"sv4crc":                   "application/x-sv4crc",
   895  	"svc":                      "application/vnd.dvb.service",
   896  	"svd":                      "application/vnd.svd",
   897  	"svg":                      "image/svg+xml",
   898  	"svgz":                     "image/svg+xml",
   899  	"swa":                      "application/x-director",
   900  	"swf":                      "application/x-shockwave-flash",
   901  	"swi":                      "application/vnd.aristanetworks.swi",
   902  	"sxc":                      "application/vnd.sun.xml.calc",
   903  	"sxd":                      "application/vnd.sun.xml.draw",
   904  	"sxg":                      "application/vnd.sun.xml.writer.global",
   905  	"sxi":                      "application/vnd.sun.xml.impress",
   906  	"sxm":                      "application/vnd.sun.xml.math",
   907  	"sxw":                      "application/vnd.sun.xml.writer",
   908  	"t":                        "text/troff",
   909  	"t3":                       "application/x-t3vm-image",
   910  	"t38":                      "image/t38",
   911  	"taglet":                   "application/vnd.mynfc",
   912  	"tao":                      "application/vnd.tao.intent-module-archive",
   913  	"tap":                      "image/vnd.tencent.tap",
   914  	"tar":                      "application/x-tar",
   915  	"tcap":                     "application/vnd.3gpp2.tcap",
   916  	"tcl":                      "application/x-tcl",
   917  	"teacher":                  "application/vnd.smart.teacher",
   918  	"tei":                      "application/tei+xml",
   919  	"teicorpus":                "application/tei+xml",
   920  	"tex":                      "application/x-tex",
   921  	"texi":                     "application/x-texinfo",
   922  	"texinfo":                  "application/x-texinfo",
   923  	"text":                     "text/plain",
   924  	"tfi":                      "application/thraud+xml",
   925  	"tfm":                      "application/x-tex-tfm",
   926  	"tfx":                      "image/tiff-fx",
   927  	"tga":                      "image/x-tga",
   928  	"tgz":                      "application/gzip",
   929  	"thmx":                     "application/vnd.ms-officetheme",
   930  	"tif":                      "image/tiff",
   931  	"tiff":                     "image/tiff",
   932  	"tk":                       "application/x-tcl",
   933  	"tmo":                      "application/vnd.tmobile-livetv",
   934  	"torrent":                  "application/x-bittorrent",
   935  	"tpl":                      "application/vnd.groove-tool-template",
   936  	"tpt":                      "application/vnd.trid.tpt",
   937  	"tr":                       "text/troff",
   938  	"tra":                      "application/vnd.trueapp",
   939  	"trm":                      "application/x-msterminal",
   940  	"ts":                       "video/mp2t",
   941  	"tsd":                      "application/timestamped-data",
   942  	"tsv":                      "text/tab-separated-values",
   943  	"ttc":                      "font/collection",
   944  	"ttf":                      "font/ttf",
   945  	"ttl":                      "text/turtle",
   946  	"twd":                      "application/vnd.simtech-mindmapper",
   947  	"twds":                     "application/vnd.simtech-mindmapper",
   948  	"txd":                      "application/vnd.genomatix.tuxedo",
   949  	"txf":                      "application/vnd.mobius.txf",
   950  	"txt":                      "text/plain",
   951  	"u32":                      "application/x-authorware-bin",
   952  	"u8dsn":                    "message/global-delivery-status",
   953  	"u8hdr":                    "message/global-headers",
   954  	"u8mdn":                    "message/global-disposition-notification",
   955  	"u8msg":                    "message/global",
   956  	"udeb":                     "application/x-debian-package",
   957  	"ufd":                      "application/vnd.ufdl",
   958  	"ufdl":                     "application/vnd.ufdl",
   959  	"ulx":                      "application/x-glulx",
   960  	"umj":                      "application/vnd.umajin",
   961  	"unityweb":                 "application/vnd.unity",
   962  	"uoml":                     "application/vnd.uoml+xml",
   963  	"uri":                      "text/uri-list",
   964  	"uris":                     "text/uri-list",
   965  	"url":                      "text/uri-list",
   966  	"urls":                     "text/uri-list",
   967  	"ustar":                    "application/x-ustar",
   968  	"utz":                      "application/vnd.uiq.theme",
   969  	"uu":                       "text/x-uuencode",
   970  	"uva":                      "audio/vnd.dece.audio",
   971  	"uvd":                      "application/vnd.dece.data",
   972  	"uvf":                      "application/vnd.dece.data",
   973  	"uvg":                      "image/vnd.dece.graphic",
   974  	"uvh":                      "video/vnd.dece.hd",
   975  	"uvi":                      "image/vnd.dece.graphic",
   976  	"uvm":                      "video/vnd.dece.mobile",
   977  	"uvp":                      "video/vnd.dece.pd",
   978  	"uvs":                      "video/vnd.dece.sd",
   979  	"uvt":                      "application/vnd.dece.ttml+xml",
   980  	"uvu":                      "video/vnd.uvvu.mp4",
   981  	"uvv":                      "video/vnd.dece.video",
   982  	"uvva":                     "audio/vnd.dece.audio",
   983  	"uvvd":                     "application/vnd.dece.data",
   984  	"uvvf":                     "application/vnd.dece.data",
   985  	"uvvg":                     "image/vnd.dece.graphic",
   986  	"uvvh":                     "video/vnd.dece.hd",
   987  	"uvvi":                     "image/vnd.dece.graphic",
   988  	"uvvm":                     "video/vnd.dece.mobile",
   989  	"uvvp":                     "video/vnd.dece.pd",
   990  	"uvvs":                     "video/vnd.dece.sd",
   991  	"uvvt":                     "application/vnd.dece.ttml+xml",
   992  	"uvvu":                     "video/vnd.uvvu.mp4",
   993  	"uvvv":                     "video/vnd.dece.video",
   994  	"uvvx":                     "application/vnd.dece.unspecified",
   995  	"uvvz":                     "application/vnd.dece.zip",
   996  	"uvx":                      "application/vnd.dece.unspecified",
   997  	"uvz":                      "application/vnd.dece.zip",
   998  	"vbox":                     "application/x-virtualbox-vbox",
   999  	"vbox-extpack":             "application/x-virtualbox-vbox-extpack",
  1000  	"vcard":                    "text/vcard",
  1001  	"vcd":                      "application/x-cdlink",
  1002  	"vcf":                      "text/x-vcard",
  1003  	"vcg":                      "application/vnd.groove-vcard",
  1004  	"vcs":                      "text/x-vcalendar",
  1005  	"vcx":                      "application/vnd.vcx",
  1006  	"vdi":                      "application/x-virtualbox-vdi",
  1007  	"vhd":                      "application/x-virtualbox-vhd",
  1008  	"vis":                      "application/vnd.visionary",
  1009  	"viv":                      "video/vnd.vivo",
  1010  	"vmdk":                     "application/x-virtualbox-vmdk",
  1011  	"vob":                      "video/x-ms-vob",
  1012  	"vor":                      "application/vnd.stardivision.writer",
  1013  	"vox":                      "application/x-authorware-bin",
  1014  	"vrml":                     "model/vrml",
  1015  	"vsd":                      "application/vnd.visio",
  1016  	"vsf":                      "application/vnd.vsf",
  1017  	"vss":                      "application/vnd.visio",
  1018  	"vst":                      "application/vnd.visio",
  1019  	"vsw":                      "application/vnd.visio",
  1020  	"vtf":                      "image/vnd.valve.source.texture",
  1021  	"vtt":                      "text/vtt",
  1022  	"vtu":                      "model/vnd.vtu",
  1023  	"vxml":                     "application/voicexml+xml",
  1024  	"w3d":                      "application/x-director",
  1025  	"wad":                      "application/x-doom",
  1026  	"wadl":                     "application/vnd.sun.wadl+xml",
  1027  	"war":                      "application/java-archive",
  1028  	"wasm":                     "application/wasm",
  1029  	"wav":                      "audio/x-wav",
  1030  	"wax":                      "audio/x-ms-wax",
  1031  	"wbmp":                     "image/vnd.wap.wbmp",
  1032  	"wbs":                      "application/vnd.criticaltools.wbs+xml",
  1033  	"wbxml":                    "application/vnd.wap.wbxml",
  1034  	"wcm":                      "application/vnd.ms-works",
  1035  	"wdb":                      "application/vnd.ms-works",
  1036  	"wdp":                      "image/vnd.ms-photo",
  1037  	"weba":                     "audio/webm",
  1038  	"webapp":                   "application/x-web-app-manifest+json",
  1039  	"webm":                     "video/webm",
  1040  	"webmanifest":              "application/manifest+json",
  1041  	"webp":                     "image/webp",
  1042  	"wg":                       "application/vnd.pmi.widget",
  1043  	"wgt":                      "application/widget",
  1044  	"wks":                      "application/vnd.ms-works",
  1045  	"wm":                       "video/x-ms-wm",
  1046  	"wma":                      "audio/x-ms-wma",
  1047  	"wmd":                      "application/x-ms-wmd",
  1048  	"wmf":                      "image/wmf",
  1049  	"wml":                      "text/vnd.wap.wml",
  1050  	"wmlc":                     "application/vnd.wap.wmlc",
  1051  	"wmls":                     "text/vnd.wap.wmlscript",
  1052  	"wmlsc":                    "application/vnd.wap.wmlscriptc",
  1053  	"wmv":                      "video/x-ms-wmv",
  1054  	"wmx":                      "video/x-ms-wmx",
  1055  	"wmz":                      "application/x-msmetafile",
  1056  	"woff":                     "font/woff",
  1057  	"woff2":                    "font/woff2",
  1058  	"wopitest":                 "text/plain", // The dummy extension for the WOPI validator https://learn.microsoft.com/en-us/microsoft-365/cloud-storage-partner-program/online/build-test-ship/validator
  1059  	"wpd":                      "application/vnd.wordperfect",
  1060  	"wpl":                      "application/vnd.ms-wpl",
  1061  	"wps":                      "application/vnd.ms-works",
  1062  	"wqd":                      "application/vnd.wqd",
  1063  	"wri":                      "application/x-mswrite",
  1064  	"wrl":                      "model/vrml",
  1065  	"wsc":                      "message/vnd.wfa.wsc",
  1066  	"wsdl":                     "application/wsdl+xml",
  1067  	"wspolicy":                 "application/wspolicy+xml",
  1068  	"wtb":                      "application/vnd.webturbo",
  1069  	"wvx":                      "video/x-ms-wvx",
  1070  	"x32":                      "application/x-authorware-bin",
  1071  	"x3d":                      "model/x3d+xml",
  1072  	"x3db":                     "model/x3d+binary",
  1073  	"x3dbz":                    "model/x3d+binary",
  1074  	"x3dv":                     "model/x3d+vrml",
  1075  	"x3dvz":                    "model/x3d+vrml",
  1076  	"x3dz":                     "model/x3d+xml",
  1077  	"x3f":                      "image/x-sigma-x3f",
  1078  	"xaml":                     "application/xaml+xml",
  1079  	"xap":                      "application/x-silverlight-app",
  1080  	"xar":                      "application/vnd.xara",
  1081  	"xbap":                     "application/x-ms-xbap",
  1082  	"xbd":                      "application/vnd.fujixerox.docuworks.binder",
  1083  	"xbm":                      "image/x-xbitmap",
  1084  	"xdf":                      "application/xcap-diff+xml",
  1085  	"xdm":                      "application/vnd.syncml.dm+xml",
  1086  	"xdp":                      "application/vnd.adobe.xdp+xml",
  1087  	"xdssc":                    "application/dssc+xml",
  1088  	"xdw":                      "application/vnd.fujixerox.docuworks",
  1089  	"xenc":                     "application/xenc+xml",
  1090  	"xer":                      "application/patch-ops-error+xml",
  1091  	"xfdf":                     "application/vnd.adobe.xfdf",
  1092  	"xfdl":                     "application/vnd.xfdl",
  1093  	"xht":                      "application/xhtml+xml",
  1094  	"xhtml":                    "application/xhtml+xml",
  1095  	"xhvml":                    "application/xv+xml",
  1096  	"xif":                      "image/vnd.xiff",
  1097  	"xla":                      "application/vnd.ms-excel",
  1098  	"xlam":                     "application/vnd.ms-excel.addin.macroenabled.12",
  1099  	"xlc":                      "application/vnd.ms-excel",
  1100  	"xlf":                      "application/x-xliff+xml",
  1101  	"xlm":                      "application/vnd.ms-excel",
  1102  	"xls":                      "application/vnd.ms-excel",
  1103  	"xlsb":                     "application/vnd.ms-excel.sheet.binary.macroenabled.12",
  1104  	"xlsm":                     "application/vnd.ms-excel.sheet.macroenabled.12",
  1105  	"xlsx":                     "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
  1106  	"xlt":                      "application/vnd.ms-excel",
  1107  	"xltm":                     "application/vnd.ms-excel.template.macroenabled.12",
  1108  	"xltx":                     "application/vnd.openxmlformats-officedocument.spreadsheetml.template",
  1109  	"xlw":                      "application/vnd.ms-excel",
  1110  	"xm":                       "audio/xm",
  1111  	"xml":                      "text/xml",
  1112  	"xo":                       "application/vnd.olpc-sugar",
  1113  	"xop":                      "application/xop+xml",
  1114  	"xpi":                      "application/x-xpinstall",
  1115  	"xpl":                      "application/xproc+xml",
  1116  	"xpm":                      "image/x-xpixmap",
  1117  	"xpr":                      "application/vnd.is-xpr",
  1118  	"xps":                      "application/vnd.ms-xpsdocument",
  1119  	"xpw":                      "application/vnd.intercon.formnet",
  1120  	"xpx":                      "application/vnd.intercon.formnet",
  1121  	"xsd":                      "application/xml",
  1122  	"xsl":                      "application/xml",
  1123  	"xslt":                     "application/xslt+xml",
  1124  	"xsm":                      "application/vnd.syncml+xml",
  1125  	"xspf":                     "application/xspf+xml",
  1126  	"xul":                      "application/vnd.mozilla.xul+xml",
  1127  	"xvm":                      "application/xv+xml",
  1128  	"xvml":                     "application/xv+xml",
  1129  	"xwd":                      "image/x-xwindowdump",
  1130  	"xyz":                      "chemical/x-xyz",
  1131  	"xz":                       "application/x-xz",
  1132  	"yaml":                     "text/yaml",
  1133  	"yang":                     "application/yang",
  1134  	"yin":                      "application/yin+xml",
  1135  	"yml":                      "text/yaml",
  1136  	"ymp":                      "text/x-suse-ymp",
  1137  	"z1":                       "application/x-zmachine",
  1138  	"z2":                       "application/x-zmachine",
  1139  	"z3":                       "application/x-zmachine",
  1140  	"z4":                       "application/x-zmachine",
  1141  	"z5":                       "application/x-zmachine",
  1142  	"z6":                       "application/x-zmachine",
  1143  	"z7":                       "application/x-zmachine",
  1144  	"z8":                       "application/x-zmachine",
  1145  	"zaz":                      "application/vnd.zzazz.deck+xml",
  1146  	"zip":                      "application/zip",
  1147  	"zir":                      "application/vnd.zul",
  1148  	"zirz":                     "application/vnd.zul",
  1149  	"zmm":                      "application/vnd.handheld-entertainment+xml",
  1150  }
  1151  var mimes sync.Map
  1152  
  1153  func init() {
  1154  	mimes = sync.Map{}
  1155  }
  1156  
  1157  // RegisterMime is a package level function that registers
  1158  // a mime type with the given extension.
  1159  // TODO(labkode): check that we do not override mime type mappings?
  1160  func RegisterMime(ext, mime string) {
  1161  	mimes.Store(ext, mime)
  1162  }
  1163  
  1164  // Detect returns the mimetype associated with the given filename.
  1165  func Detect(isDir bool, fn string) string {
  1166  	if isDir {
  1167  		return defaultMimeDir
  1168  	}
  1169  
  1170  	ext := strings.ToLower(strings.TrimPrefix(path.Ext(fn), "."))
  1171  
  1172  	mimeType := getCustomMime(ext)
  1173  
  1174  	if mimeType == "" {
  1175  		mimeType = mimeTypes[ext]
  1176  	}
  1177  
  1178  	if mimeType == "" {
  1179  		mimeType = "application/octet-stream"
  1180  	}
  1181  
  1182  	return mimeType
  1183  }
  1184  
  1185  func getCustomMime(ext string) string {
  1186  	if m, ok := mimes.Load(ext); ok {
  1187  		return m.(string)
  1188  	}
  1189  	return ""
  1190  }