如何使用Go语言mime标准库识别文件扩展名对应的MIME类型?
- 内容介绍
- 文章标签
- 相关推荐
本文共计923个文字,预计阅读时间需要4分钟。
使用`mime.TypeByExtension`可以直接查询扩展名对应的MIME类型,但它只查扩展名,不读取文件内容。例如,`.jpg`返回`image/jpeg`,`.md`返回`text/x-markdown`(如果已注册)。
常见错误是传入带路径的字符串,比如 /home/user/report.pdf —— 它会返回空字符串,因为函数只认 .pdf 这种纯后缀。得先用 path.Base 和 path.Ext 提取扩展名:
ext := path.Ext(path.Base(filename)) // 安全提取 .pdf、.tar.gz 等 mimeType := mime.TypeByExtension(ext)
注意:.tar.gz 这类双扩展名,path.Ext 返回 .gz,不是 .tar.gz;Go 标准库默认不支持多级扩展名映射,需要手动处理或改用第三方库。
为什么 mime.TypeByExtension 对某些后缀返回空
因为 Go 的 MIME 映射表是静态内置的,只包含常见后缀(如 .js、.css、.png),很多现代格式没注册,比如 .webp、.avif、.toml、.yaml 默认都查不到。
本文共计923个文字,预计阅读时间需要4分钟。
使用`mime.TypeByExtension`可以直接查询扩展名对应的MIME类型,但它只查扩展名,不读取文件内容。例如,`.jpg`返回`image/jpeg`,`.md`返回`text/x-markdown`(如果已注册)。
常见错误是传入带路径的字符串,比如 /home/user/report.pdf —— 它会返回空字符串,因为函数只认 .pdf 这种纯后缀。得先用 path.Base 和 path.Ext 提取扩展名:
ext := path.Ext(path.Base(filename)) // 安全提取 .pdf、.tar.gz 等 mimeType := mime.TypeByExtension(ext)
注意:.tar.gz 这类双扩展名,path.Ext 返回 .gz,不是 .tar.gz;Go 标准库默认不支持多级扩展名映射,需要手动处理或改用第三方库。
为什么 mime.TypeByExtension 对某些后缀返回空
因为 Go 的 MIME 映射表是静态内置的,只包含常见后缀(如 .js、.css、.png),很多现代格式没注册,比如 .webp、.avif、.toml、.yaml 默认都查不到。

