Files
MeowBox-Core/internal/service/mime.go
2025-11-22 17:33:40 +08:00

146 lines
5.2 KiB
Go

package service
import "strings"
func GetContentType(filename string) string {
// Convert file names to lowercase for case insensitive comparison
lowerFilename := strings.ToLower(filename)
switch {
// Text files
case strings.HasSuffix(lowerFilename, ".css"):
return "text/css; charset=utf-8"
case strings.HasSuffix(lowerFilename, ".js"):
return "application/javascript; charset=utf-8"
case strings.HasSuffix(lowerFilename, ".json"):
return "application/json; charset=utf-8"
case strings.HasSuffix(lowerFilename, ".xml"):
return "application/xml; charset=utf-8"
case strings.HasSuffix(lowerFilename, ".html"), strings.HasSuffix(lowerFilename, ".htm"):
return "text/html; charset=utf-8"
case strings.HasSuffix(lowerFilename, ".txt"):
return "text/plain; charset=utf-8"
case strings.HasSuffix(lowerFilename, ".md"):
return "text/markdown; charset=utf-8"
case strings.HasSuffix(lowerFilename, ".csv"):
return "text/csv; charset=utf-8"
// Image files
case strings.HasSuffix(lowerFilename, ".webp"):
return "image/webp"
case strings.HasSuffix(lowerFilename, ".png"):
return "image/png"
case strings.HasSuffix(lowerFilename, ".jpg"), strings.HasSuffix(lowerFilename, ".jpeg"):
return "image/jpeg"
case strings.HasSuffix(lowerFilename, ".gif"):
return "image/gif"
case strings.HasSuffix(lowerFilename, ".bmp"):
return "image/bmp"
case strings.HasSuffix(lowerFilename, ".ico"):
return "image/x-icon"
case strings.HasSuffix(lowerFilename, ".svg"), strings.HasSuffix(lowerFilename, ".svgz"):
return "image/svg+xml"
case strings.HasSuffix(lowerFilename, ".tiff"), strings.HasSuffix(lowerFilename, ".tif"):
return "image/tiff"
case strings.HasSuffix(lowerFilename, ".avif"):
return "image/avif"
// Audio files
case strings.HasSuffix(lowerFilename, ".mp3"):
return "audio/mpeg"
case strings.HasSuffix(lowerFilename, ".wav"):
return "audio/wav"
case strings.HasSuffix(lowerFilename, ".ogg"):
return "audio/ogg"
case strings.HasSuffix(lowerFilename, ".flac"):
return "audio/flac"
case strings.HasSuffix(lowerFilename, ".aac"):
return "audio/aac"
case strings.HasSuffix(lowerFilename, ".m4a"):
return "audio/mp4"
// Video files
case strings.HasSuffix(lowerFilename, ".mp4"):
return "video/mp4"
case strings.HasSuffix(lowerFilename, ".webm"):
return "video/webm"
case strings.HasSuffix(lowerFilename, ".ogg"), strings.HasSuffix(lowerFilename, ".ogv"):
return "video/ogg"
case strings.HasSuffix(lowerFilename, ".mov"):
return "video/quicktime"
case strings.HasSuffix(lowerFilename, ".avi"):
return "video/x-msvideo"
case strings.HasSuffix(lowerFilename, ".wmv"):
return "video/x-ms-wmv"
case strings.HasSuffix(lowerFilename, ".flv"):
return "video/x-flv"
case strings.HasSuffix(lowerFilename, ".mkv"):
return "video/x-matroska"
// Font files
case strings.HasSuffix(lowerFilename, ".woff"):
return "font/woff"
case strings.HasSuffix(lowerFilename, ".woff2"):
return "font/woff2"
case strings.HasSuffix(lowerFilename, ".ttf"):
return "font/ttf"
case strings.HasSuffix(lowerFilename, ".otf"):
return "font/otf"
// Archive files
case strings.HasSuffix(lowerFilename, ".zip"):
return "application/zip"
case strings.HasSuffix(lowerFilename, ".rar"):
return "application/x-rar-compressed"
case strings.HasSuffix(lowerFilename, ".gz"):
return "application/gzip"
case strings.HasSuffix(lowerFilename, ".tar"):
return "application/x-tar"
case strings.HasSuffix(lowerFilename, ".7z"):
return "application/x-7z-compressed"
case strings.HasSuffix(lowerFilename, ".bz2"):
return "application/x-bzip2"
case strings.HasSuffix(lowerFilename, ".xz"):
return "application/x-xz"
// Document files
case strings.HasSuffix(lowerFilename, ".pdf"):
return "application/pdf"
case strings.HasSuffix(lowerFilename, ".doc"):
return "application/msword"
case strings.HasSuffix(lowerFilename, ".docx"):
return "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
case strings.HasSuffix(lowerFilename, ".xls"):
return "application/vnd.ms-excel"
case strings.HasSuffix(lowerFilename, ".xlsx"):
return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
case strings.HasSuffix(lowerFilename, ".ppt"):
return "application/vnd.ms-powerpoint"
case strings.HasSuffix(lowerFilename, ".pptx"):
return "application/vnd.openxmlformats-officedocument.presentationml.presentation"
case strings.HasSuffix(lowerFilename, ".odt"):
return "application/vnd.oasis.opendocument.text"
case strings.HasSuffix(lowerFilename, ".ods"):
return "application/vnd.oasis.opendocument.spreadsheet"
case strings.HasSuffix(lowerFilename, ".odp"):
return "application/vnd.oasis.opendocument.presentation"
// Other files
case strings.HasSuffix(lowerFilename, ".rtf"):
return "application/rtf"
case strings.HasSuffix(lowerFilename, ".epub"):
return "application/epub+zip"
case strings.HasSuffix(lowerFilename, ".apk"):
return "application/vnd.android.package-archive"
case strings.HasSuffix(lowerFilename, ".exe"):
return "application/x-msdownload"
case strings.HasSuffix(lowerFilename, ".dmg"):
return "application/x-apple-diskimage"
case strings.HasSuffix(lowerFilename, ".iso"):
return "application/x-iso9660-image"
default:
return "application/octet-stream"
}
}