Advertisement
stuppid_bot

Node.js statics.js отдача статики

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