Module: Rack::Mime

Defined in:
lib/rack/mime.rb

Constant Summary collapse

MIME_TYPES =

List of most common mime-types, selected various sources according to their usefulness in a webserving scope for Ruby users.

To amend this list with your local mime.types list you can use:

require 'webrick/httputils'
list = WEBrick::HTTPUtils.load_mime_types('/etc/mime.types')
Rack::Mime::MIME_TYPES.merge!(list)

To add the list mongrel provides, use:

require 'mongrel/handlers'
Rack::Mime::MIME_TYPES.merge!(Mongrel::DirHandler::MIME_TYPES)
{
  ".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",
  ".htc"     => "text/x-component",
  ".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",
  ".manifest"=> "text/cache-manifest",
  ".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",
  ".ogv"     => "video/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",
  ".ttf"     => "application/octet-stream",
  ".txt"     => "text/plain",
  ".vcf"     => "text/x-vcard",
  ".vcs"     => "text/x-vcalendar",
  ".vrml"    => "model/vrml",
  ".war"     => "application/java-archive",
  ".wav"     => "audio/x-wav",
  ".webm"    => "video/webm",
  ".wma"     => "audio/x-ms-wma",
  ".wmv"     => "video/x-ms-wmv",
  ".wmx"     => "video/x-ms-wmx",
  ".woff"    => "application/octet-stream",
  ".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",
}

Class Method Summary collapse

Class Method Details

.mime_type(ext, fallback = 'application/octet-stream') ⇒ Object

Returns String with mime type if found, otherwise use fallback. ext should be filename extension in the ‘.ext’ format that

File.extname(file) returns.

fallback may be any object

Also see the documentation for MIME_TYPES

Usage:

Rack::Mime.mime_type('.foo')

This is a shortcut for:

Rack::Mime::MIME_TYPES.fetch('.foo', 'application/octet-stream')


16
17
18
# File 'lib/rack/mime.rb', line 16

def mime_type(ext, fallback='application/octet-stream')
  MIME_TYPES.fetch(ext.to_s.downcase, fallback)
end