175 lines
7.4 KiB
Go
175 lines
7.4 KiB
Go
|
package publish
|
||
|
|
||
|
import "strings"
|
||
|
|
||
|
func guessMimeType(ext string) (string, string) {
|
||
|
if ext == "" {
|
||
|
return "application/octet-stream", "binary"
|
||
|
}
|
||
|
|
||
|
ext = strings.ToLower(strings.TrimLeft(strings.TrimSpace(ext), "."))
|
||
|
|
||
|
types := map[string]struct{ mime, t string }{
|
||
|
"a": {"application/octet-stream", "binary"},
|
||
|
"ai": {"application/postscript", "image"},
|
||
|
"aif": {"audio/x-aiff", "audio"},
|
||
|
"aifc": {"audio/x-aiff", "audio"},
|
||
|
"aiff": {"audio/x-aiff", "audio"},
|
||
|
"au": {"audio/basic", "audio"},
|
||
|
"avi": {"video/x-msvideo", "video"},
|
||
|
"bat": {"text/plain", "document"},
|
||
|
"bcpio": {"application/x-bcpio", "binary"},
|
||
|
"bin": {"application/octet-stream", "binary"},
|
||
|
"bmp": {"image/bmp", "image"},
|
||
|
"c": {"text/plain", "document"},
|
||
|
"cdf": {"application/x-netcdf", "binary"},
|
||
|
"cpio": {"application/x-cpio", "binary"},
|
||
|
"csh": {"application/x-csh", "binary"},
|
||
|
"css": {"text/css", "document"},
|
||
|
"csv": {"text/csv", "document"},
|
||
|
"dll": {"application/octet-stream", "binary"},
|
||
|
"doc": {"application/msword", "document"},
|
||
|
"dot": {"application/msword", "document"},
|
||
|
"dvi": {"application/x-dvi", "binary"},
|
||
|
"eml": {"message/rfc822", "document"},
|
||
|
"eps": {"application/postscript", "document"},
|
||
|
"epub": {"application/epub+zip", "document"},
|
||
|
"etx": {"text/x-setext", "document"},
|
||
|
"exe": {"application/octet-stream", "binary"},
|
||
|
"gif": {"image/gif", "image"},
|
||
|
"gtar": {"application/x-gtar", "binary"},
|
||
|
"h": {"text/plain", "document"},
|
||
|
"hdf": {"application/x-hdf", "binary"},
|
||
|
"htm": {"text/html", "document"},
|
||
|
"html": {"text/html", "document"},
|
||
|
"ico": {"image/vnd.microsoft.icon", "image"},
|
||
|
"ief": {"image/ief", "image"},
|
||
|
"iges": {"model/iges", "model"},
|
||
|
"jpe": {"image/jpeg", "image"},
|
||
|
"jpeg": {"image/jpeg", "image"},
|
||
|
"jpg": {"image/jpeg", "image"},
|
||
|
"js": {"application/javascript", "document"},
|
||
|
"json": {"application/json", "document"},
|
||
|
"ksh": {"text/plain", "document"},
|
||
|
"latex": {"application/x-latex", "binary"},
|
||
|
"m1v": {"video/mpeg", "video"},
|
||
|
"m3u": {"application/vnd.apple.mpegurl", "audio"},
|
||
|
"m3u8": {"application/vnd.apple.mpegurl", "audio"},
|
||
|
"man": {"application/x-troff-man", "document"},
|
||
|
"markdown": {"text/markdown", "document"},
|
||
|
"md": {"text/markdown", "document"},
|
||
|
"me": {"application/x-troff-me", "binary"},
|
||
|
"mht": {"message/rfc822", "document"},
|
||
|
"mhtml": {"message/rfc822", "document"},
|
||
|
"mif": {"application/x-mif", "binary"},
|
||
|
"mov": {"video/quicktime", "video"},
|
||
|
"movie": {"video/x-sgi-movie", "video"},
|
||
|
"mp2": {"audio/mpeg", "audio"},
|
||
|
"mp3": {"audio/mpeg", "audio"},
|
||
|
"mp4": {"video/mp4", "video"},
|
||
|
"mpa": {"video/mpeg", "video"},
|
||
|
"mpe": {"video/mpeg", "video"},
|
||
|
"mpeg": {"video/mpeg", "video"},
|
||
|
"mpg": {"video/mpeg", "video"},
|
||
|
"ms": {"application/x-troff-ms", "binary"},
|
||
|
"nc": {"application/x-netcdf", "binary"},
|
||
|
"nws": {"message/rfc822", "document"},
|
||
|
"o": {"application/octet-stream", "binary"},
|
||
|
"obj": {"application/octet-stream", "model"},
|
||
|
"oda": {"application/oda", "binary"},
|
||
|
"p12": {"application/x-pkcs12", "binary"},
|
||
|
"p7c": {"application/pkcs7-mime", "binary"},
|
||
|
"pbm": {"image/x-portable-bitmap", "image"},
|
||
|
"pdf": {"application/pdf", "document"},
|
||
|
"pfx": {"application/x-pkcs12", "binary"},
|
||
|
"pgm": {"image/x-portable-graymap", "image"},
|
||
|
"pl": {"text/plain", "document"},
|
||
|
"png": {"image/png", "image"},
|
||
|
"pnm": {"image/x-portable-anymap", "image"},
|
||
|
"pot": {"application/vnd.ms-powerpoint", "document"},
|
||
|
"ppa": {"application/vnd.ms-powerpoint", "document"},
|
||
|
"ppm": {"image/x-portable-pixmap", "image"},
|
||
|
"pps": {"application/vnd.ms-powerpoint", "document"},
|
||
|
"ppt": {"application/vnd.ms-powerpoint", "document"},
|
||
|
"ps": {"application/postscript", "document"},
|
||
|
"pwz": {"application/vnd.ms-powerpoint", "document"},
|
||
|
"py": {"text/x-python", "document"},
|
||
|
"pyc": {"application/x-python-code", "binary"},
|
||
|
"pyo": {"application/x-python-code", "binary"},
|
||
|
"qt": {"video/quicktime", "video"},
|
||
|
"ra": {"audio/x-pn-realaudio", "audio"},
|
||
|
"ram": {"application/x-pn-realaudio", "audio"},
|
||
|
"ras": {"image/x-cmu-raster", "image"},
|
||
|
"rdf": {"application/xml", "binary"},
|
||
|
"rgb": {"image/x-rgb", "image"},
|
||
|
"roff": {"application/x-troff", "binary"},
|
||
|
"rtx": {"text/richtext", "document"},
|
||
|
"sgm": {"text/x-sgml", "document"},
|
||
|
"sgml": {"text/x-sgml", "document"},
|
||
|
"sh": {"application/x-sh", "document"},
|
||
|
"shar": {"application/x-shar", "binary"},
|
||
|
"snd": {"audio/basic", "audio"},
|
||
|
"so": {"application/octet-stream", "binary"},
|
||
|
"src": {"application/x-wais-source", "binary"},
|
||
|
"stl": {"model/stl", "model"},
|
||
|
"sv4cpio": {"application/x-sv4cpio", "binary"},
|
||
|
"sv4crc": {"application/x-sv4crc", "binary"},
|
||
|
"svg": {"image/svg+xml", "image"},
|
||
|
"swf": {"application/x-shockwave-flash", "binary"},
|
||
|
"t": {"application/x-troff", "binary"},
|
||
|
"tar": {"application/x-tar", "binary"},
|
||
|
"tcl": {"application/x-tcl", "binary"},
|
||
|
"tex": {"application/x-tex", "binary"},
|
||
|
"texi": {"application/x-texinfo", "binary"},
|
||
|
"texinfo": {"application/x-texinfo", "binary"},
|
||
|
"tif": {"image/tiff", "image"},
|
||
|
"tiff": {"image/tiff", "image"},
|
||
|
"tr": {"application/x-troff", "binary"},
|
||
|
"tsv": {"text/tab-separated-values", "document"},
|
||
|
"txt": {"text/plain", "document"},
|
||
|
"ustar": {"application/x-ustar", "binary"},
|
||
|
"vcf": {"text/x-vcard", "document"},
|
||
|
"wav": {"audio/x-wav", "audio"},
|
||
|
"webm": {"video/webm", "video"},
|
||
|
"wiz": {"application/msword", "document"},
|
||
|
"wsdl": {"application/xml", "document"},
|
||
|
"xbm": {"image/x-xbitmap", "image"},
|
||
|
"xlb": {"application/vnd.ms-excel", "document"},
|
||
|
"xls": {"application/vnd.ms-excel", "document"},
|
||
|
"xml": {"text/xml", "document"},
|
||
|
"xpdl": {"application/xml", "document"},
|
||
|
"xpm": {"image/x-xpixmap", "image"},
|
||
|
"xsl": {"application/xml", "document"},
|
||
|
"xwd": {"image/x-xwindowdump", "image"},
|
||
|
"zip": {"application/zip", "binary"},
|
||
|
|
||
|
// These are non-standard types, commonly found in the wild.
|
||
|
"cbr": {"application/vnd.comicbook-rar", "document"},
|
||
|
"cbz": {"application/vnd.comicbook+zip", "document"},
|
||
|
"flac": {"audio/flac", "audio"},
|
||
|
"lbry": {"application/x-ext-lbry", "document"},
|
||
|
"m4v": {"video/m4v", "video"},
|
||
|
"mid": {"audio/midi", "audio"},
|
||
|
"midi": {"audio/midi", "audio"},
|
||
|
"mkv": {"video/x-matroska", "video"},
|
||
|
"mobi": {"application/x-mobipocket-ebook", "document"},
|
||
|
"oga": {"audio/ogg", "audio"},
|
||
|
"ogv": {"video/ogg", "video"},
|
||
|
"pct": {"image/pict", "image"},
|
||
|
"pic": {"image/pict", "image"},
|
||
|
"pict": {"image/pict", "image"},
|
||
|
"prc": {"application/x-mobipocket-ebook", "document"},
|
||
|
"rtf": {"application/rtf", "document"},
|
||
|
"xul": {"text/xul", "document"},
|
||
|
|
||
|
// microsoft is special and has its own "standard"
|
||
|
// https://docs.microsoft.com/en-us/windows/desktop/wmp/file-name-extensions
|
||
|
"wmv": {"video/x-ms-wmv", "video"},
|
||
|
}
|
||
|
|
||
|
if data, ok := types[ext]; ok {
|
||
|
return data.mime, data.t
|
||
|
}
|
||
|
return "application/x-ext-" + ext, "binary"
|
||
|
}
|