Skip to content

Instantly share code, notes, and snippets.

@mrichie
Forked from rrobe53/gist:976610
Created June 1, 2012 07:06
Show Gist options
  • Save mrichie/2849763 to your computer and use it in GitHub Desktop.
Save mrichie/2849763 to your computer and use it in GitHub Desktop.
Node.js File Extension Content Type
exports.ext = function () {
var extTypes = {
"3gp" : "video/3gpp"
, "a" : "application/octet-stream"
, "ai" : "application/postscript"
, "aif" : "audio/x-aiff"
, "aiff" : "audio/x-aiff"
, "asc" : "application/pgp-signature"
, "asf" : "video/x-ms-asf"
, "asm" : "text/x-asm"
, "asx" : "video/x-ms-asf"
, "atom" : "application/atom+xml"
, "au" : "audio/basic"
, "avi" : "video/x-msvideo"
, "bat" : "application/x-msdownload"
, "bin" : "application/octet-stream"
, "bmp" : "image/bmp"
, "bz2" : "application/x-bzip2"
, "c" : "text/x-c"
, "cab" : "application/vnd.ms-cab-compressed"
, "cc" : "text/x-c"
, "chm" : "application/vnd.ms-htmlhelp"
, "class" : "application/octet-stream"
, "com" : "application/x-msdownload"
, "conf" : "text/plain"
, "cpp" : "text/x-c"
, "crt" : "application/x-x509-ca-cert"
, "css" : "text/css"
, "csv" : "text/csv"
, "cxx" : "text/x-c"
, "deb" : "application/x-debian-package"
, "der" : "application/x-x509-ca-cert"
, "diff" : "text/x-diff"
, "djv" : "image/vnd.djvu"
, "djvu" : "image/vnd.djvu"
, "dll" : "application/x-msdownload"
, "dmg" : "application/octet-stream"
, "doc" : "application/msword"
, "dot" : "application/msword"
, "dtd" : "application/xml-dtd"
, "dvi" : "application/x-dvi"
, "ear" : "application/java-archive"
, "eml" : "message/rfc822"
, "eps" : "application/postscript"
, "exe" : "application/x-msdownload"
, "f" : "text/x-fortran"
, "f77" : "text/x-fortran"
, "f90" : "text/x-fortran"
, "flv" : "video/x-flv"
, "for" : "text/x-fortran"
, "gem" : "application/octet-stream"
, "gemspec" : "text/x-script.ruby"
, "gif" : "image/gif"
, "gz" : "application/x-gzip"
, "h" : "text/x-c"
, "hh" : "text/x-c"
, "htm" : "text/html"
, "html" : "text/html"
, "ico" : "image/vnd.microsoft.icon"
, "ics" : "text/calendar"
, "ifb" : "text/calendar"
, "iso" : "application/octet-stream"
, "jar" : "application/java-archive"
, "java" : "text/x-java-source"
, "jnlp" : "application/x-java-jnlp-file"
, "jpeg" : "image/jpeg"
, "jpg" : "image/jpeg"
, "js" : "application/javascript"
, "json" : "application/json"
, "log" : "text/plain"
, "m3u" : "audio/x-mpegurl"
, "m4v" : "video/mp4"
, "man" : "text/troff"
, "mathml" : "application/mathml+xml"
, "mbox" : "application/mbox"
, "mdoc" : "text/troff"
, "me" : "text/troff"
, "mid" : "audio/midi"
, "midi" : "audio/midi"
, "mime" : "message/rfc822"
, "mml" : "application/mathml+xml"
, "mng" : "video/x-mng"
, "mov" : "video/quicktime"
, "mp3" : "audio/mpeg"
, "mp4" : "video/mp4"
, "mp4v" : "video/mp4"
, "mpeg" : "video/mpeg"
, "mpg" : "video/mpeg"
, "ms" : "text/troff"
, "msi" : "application/x-msdownload"
, "odp" : "application/vnd.oasis.opendocument.presentation"
, "ods" : "application/vnd.oasis.opendocument.spreadsheet"
, "odt" : "application/vnd.oasis.opendocument.text"
, "ogg" : "application/ogg"
, "p" : "text/x-pascal"
, "pas" : "text/x-pascal"
, "pbm" : "image/x-portable-bitmap"
, "pdf" : "application/pdf"
, "pem" : "application/x-x509-ca-cert"
, "pgm" : "image/x-portable-graymap"
, "pgp" : "application/pgp-encrypted"
, "pkg" : "application/octet-stream"
, "pl" : "text/x-script.perl"
, "pm" : "text/x-script.perl-module"
, "png" : "image/png"
, "pnm" : "image/x-portable-anymap"
, "ppm" : "image/x-portable-pixmap"
, "pps" : "application/vnd.ms-powerpoint"
, "ppt" : "application/vnd.ms-powerpoint"
, "ps" : "application/postscript"
, "psd" : "image/vnd.adobe.photoshop"
, "py" : "text/x-script.python"
, "qt" : "video/quicktime"
, "ra" : "audio/x-pn-realaudio"
, "rake" : "text/x-script.ruby"
, "ram" : "audio/x-pn-realaudio"
, "rar" : "application/x-rar-compressed"
, "rb" : "text/x-script.ruby"
, "rdf" : "application/rdf+xml"
, "roff" : "text/troff"
, "rpm" : "application/x-redhat-package-manager"
, "rss" : "application/rss+xml"
, "rtf" : "application/rtf"
, "ru" : "text/x-script.ruby"
, "s" : "text/x-asm"
, "sgm" : "text/sgml"
, "sgml" : "text/sgml"
, "sh" : "application/x-sh"
, "sig" : "application/pgp-signature"
, "snd" : "audio/basic"
, "so" : "application/octet-stream"
, "svg" : "image/svg+xml"
, "svgz" : "image/svg+xml"
, "swf" : "application/x-shockwave-flash"
, "t" : "text/troff"
, "tar" : "application/x-tar"
, "tbz" : "application/x-bzip-compressed-tar"
, "tcl" : "application/x-tcl"
, "tex" : "application/x-tex"
, "texi" : "application/x-texinfo"
, "texinfo" : "application/x-texinfo"
, "text" : "text/plain"
, "tif" : "image/tiff"
, "tiff" : "image/tiff"
, "torrent" : "application/x-bittorrent"
, "tr" : "text/troff"
, "txt" : "text/plain"
, "vcf" : "text/x-vcard"
, "vcs" : "text/x-vcalendar"
, "vrml" : "model/vrml"
, "war" : "application/java-archive"
, "wav" : "audio/x-wav"
, "wma" : "audio/x-ms-wma"
, "wmv" : "video/x-ms-wmv"
, "wmx" : "video/x-ms-wmx"
, "wrl" : "model/vrml"
, "wsdl" : "application/wsdl+xml"
, "xbm" : "image/x-xbitmap"
, "xhtml" : "application/xhtml+xml"
, "xls" : "application/vnd.ms-excel"
, "xml" : "application/xml"
, "xpm" : "image/x-xpixmap"
, "xsl" : "application/xml"
, "xslt" : "application/xslt+xml"
, "yaml" : "text/yaml"
, "yml" : "text/yaml"
, "zip" : "application/zip"
}
return {
getExt: function (path) {
var i = path.lastIndexOf('.');
return (i < 0) ? '' : path.substr(i);
},
getContentType: function (ext) {
return extTypes[ext.toLowerCase()] || 'application/octet-stream';
}
};
}();
@scharf
Copy link

scharf commented Dec 18, 2017

I would change getExt function to return path.substr(i+1) else, the extension contains the . and getContentType(getExt(path)) would not work.

@toozhuang
Copy link

@scharf, correct~ otherwise the contentype always return octet-stream

@KaanGaming
Copy link

No .webp handling?

@demepty
Copy link

demepty commented Jun 25, 2019

Nice!!

@RadoslawB
Copy link

@scharf - you are right. I was just debugging and found that mistake

@webcaetano
Copy link

Please name my daughter, you rock!

@Octalbyte
Copy link

The hero we do not deserve.

@MxxSantiago
Copy link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment