97 lines
2.9 KiB
Go
97 lines
2.9 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"os/exec"
|
||
|
"path/filepath"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
var mimetypes = map[string]string{
|
||
|
".aac": "audio/aac",
|
||
|
".abw": "application/x-abiword",
|
||
|
".arc": "application/x-freearc",
|
||
|
".avi": "video/x-msvideo",
|
||
|
".azw": "application/vnd.amazon.ebook",
|
||
|
".bin": "application/octet-stream",
|
||
|
".bmp": "image/bmp",
|
||
|
".bz": "application/x-bzip",
|
||
|
".bz2": "application/x-bzip2",
|
||
|
".cda": "application/x-cdf",
|
||
|
".csh": "application/x-csh",
|
||
|
".css": "text/css",
|
||
|
".csv": "text/csv",
|
||
|
".doc": "application/msword",
|
||
|
".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
||
|
".eot": "application/vnd.ms-fontobject",
|
||
|
".epub": "application/epub+zip",
|
||
|
".gz": "application/gzip",
|
||
|
".gif": "image/gif",
|
||
|
".htm": "text/html",
|
||
|
".html": "text/html",
|
||
|
".ico": "image/vnd.microsoft.icon",
|
||
|
".ics": "text/calendar",
|
||
|
".jar": "application/java-archive",
|
||
|
".jpeg": ".jpg image/jpeg",
|
||
|
".js": "text/javascript",
|
||
|
".json": "application/json",
|
||
|
".jsonld": "application/ld+json",
|
||
|
".mid": "audio/midi",
|
||
|
".midi": "audio/midi",
|
||
|
".mjs": "text/javascript",
|
||
|
".mp3": "audio/mpeg",
|
||
|
".mp4": "video/mp4",
|
||
|
".mpeg": "video/mpeg",
|
||
|
".mpkg": "application/vnd.apple.installer+xml",
|
||
|
".odp": "application/vnd.oasis.opendocument.presentation",
|
||
|
".ods": "application/vnd.oasis.opendocument.spreadsheet",
|
||
|
".odt": "application/vnd.oasis.opendocument.text",
|
||
|
".oga": "audio/ogg",
|
||
|
".ogv": "video/ogg",
|
||
|
".ogx": "application/ogg",
|
||
|
".opus": "audio/opus",
|
||
|
".otf": "font/otf",
|
||
|
".png": "image/png",
|
||
|
".pdf": "application/pdf",
|
||
|
".php": "application/x-httpd-php",
|
||
|
".ppt": "application/vnd.ms-powerpoint",
|
||
|
".pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
|
||
|
".rar": "application/vnd.rar",
|
||
|
".rtf": "application/rtf",
|
||
|
".sh": "application/x-sh",
|
||
|
".svg": "image/svg+xml",
|
||
|
".swf": "application/x-shockwave-flash",
|
||
|
".tar": "application/x-tar",
|
||
|
".tif": "image/tiff",
|
||
|
".tiff": "image/tiff",
|
||
|
".ts": "video/mp2t",
|
||
|
".ttf": "font/ttf",
|
||
|
".txt": "text/plain",
|
||
|
".vsd": "application/vnd.visio",
|
||
|
".wav": "audio/wav",
|
||
|
".weba": "audio/webm",
|
||
|
".webm": "video/webm",
|
||
|
".webp": "image/webp",
|
||
|
".woff": "font/woff",
|
||
|
".woff2": "font/woff2",
|
||
|
".xhtml": "application/xhtml+xml",
|
||
|
".xls": "application/vnd.ms-excel",
|
||
|
".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
||
|
".xml": "application/xml",
|
||
|
".xul": "application/vnd.mozilla.xul+xml",
|
||
|
".zip": "application/zip",
|
||
|
".7z": "application/x-7z-compressed",
|
||
|
}
|
||
|
|
||
|
func getMimetype(path string) string {
|
||
|
cmd := exec.Command("file", "--mime-type", path)
|
||
|
data, err := cmd.CombinedOutput()
|
||
|
if err != nil {
|
||
|
if mimetype, ok := mimetypes[filepath.Ext(path)]; ok {
|
||
|
return mimetype
|
||
|
}
|
||
|
return "text/plain"
|
||
|
}
|
||
|
|
||
|
return strings.Split(string(data), ": ")[1]
|
||
|
}
|