mirror of
https://github.com/rustfs/console.git
synced 2026-08-30 17:14:47 +08:00
76 lines
2.2 KiB
TypeScript
76 lines
2.2 KiB
TypeScript
/**
|
|
* Get MIME type from file extension
|
|
*/
|
|
export function getMimeTypeFromFilename(filename: string): string {
|
|
const ext = filename.split(".").pop()?.toLowerCase() ?? ""
|
|
|
|
const mimeTypes: Record<string, string> = {
|
|
jpg: "image/jpeg",
|
|
jpeg: "image/jpeg",
|
|
png: "image/png",
|
|
gif: "image/gif",
|
|
webp: "image/webp",
|
|
svg: "image/svg+xml",
|
|
ico: "image/x-icon",
|
|
bmp: "image/bmp",
|
|
tiff: "image/tiff",
|
|
tif: "image/tiff",
|
|
mp4: "video/mp4",
|
|
webm: "video/webm",
|
|
ogv: "video/ogg",
|
|
avi: "video/x-msvideo",
|
|
mov: "video/quicktime",
|
|
wmv: "video/x-ms-wmv",
|
|
flv: "video/x-flv",
|
|
mkv: "video/x-matroska",
|
|
mp3: "audio/mpeg",
|
|
wav: "audio/wav",
|
|
ogg: "audio/ogg",
|
|
oga: "audio/ogg",
|
|
m4a: "audio/mp4",
|
|
flac: "audio/flac",
|
|
aac: "audio/aac",
|
|
pdf: "application/pdf",
|
|
doc: "application/msword",
|
|
docx: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
|
xls: "application/vnd.ms-excel",
|
|
xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
|
ppt: "application/vnd.ms-powerpoint",
|
|
pptx: "application/vnd.openxmlformats-officedocument.presentationml.document",
|
|
txt: "text/plain",
|
|
csv: "text/csv",
|
|
rtf: "application/rtf",
|
|
zip: "application/zip",
|
|
rar: "application/x-rar-compressed",
|
|
"7z": "application/x-7z-compressed",
|
|
tar: "application/x-tar",
|
|
gz: "application/gzip",
|
|
bz2: "application/x-bzip2",
|
|
html: "text/html",
|
|
htm: "text/html",
|
|
css: "text/css",
|
|
js: "application/javascript",
|
|
json: "application/json",
|
|
jsonl: "application/x-ndjson",
|
|
ndjson: "application/x-ndjson",
|
|
xml: "application/xml",
|
|
wasm: "application/wasm",
|
|
ttf: "font/ttf",
|
|
otf: "font/otf",
|
|
woff: "font/woff",
|
|
woff2: "font/woff2",
|
|
eot: "application/vnd.ms-fontobject",
|
|
}
|
|
|
|
return mimeTypes[ext] ?? "application/octet-stream"
|
|
}
|
|
|
|
/**
|
|
* Get content type from response headers or infer from filename
|
|
*/
|
|
export function getContentType(headers: Headers, filename: string): string {
|
|
const contentType = headers.get("content-type")
|
|
if (contentType) return contentType
|
|
return getMimeTypeFromFilename(filename)
|
|
}
|