我正在寻找一种快速的方法来猜测文件名的Go语言中的mime类型和编码。在Python中,您可以执行以下操作:
import mimetypes
type, encoding = mimetypes.guess_type(file_name)
去有类似的东西吗?我看到了mimetypes包,但我认为它不能从文件名中导出编码。
答案 0 :(得分:2)
使用mime.TypeByExtension获取给定文件扩展名的mime类型:
fmt.Println(mime.TypeByExtension(".jpg")) // prints image/jpeg
如果以完整的文件名开头,请使用filepath.Ext获取扩展名并将该扩展名传递给上面的函数:
fmt.Println(mime.TypeByExtension(filepath.Ext("blah.gif"))) // prints image/gif
答案 1 :(得分:-1)
我对OP如何使用他们要检查的文件没有任何了解。如果您要从未知来源(例如从网站用户)进行上传并根据文件扩展名that's a security issue进行检查。如果要处理用户提交的内容,则应始终检查魔术页眉和页脚。
请尝试以下操作:https://github.com/h2non/filetype
由于不赞成仅粘贴答案链接,因此他们粘贴了代码示例:
package main
import (
"fmt"
"gopkg.in/h2non/filetype.v1"
"io/ioutil"
)
func main() {
buf, _ := ioutil.ReadFile("guess_file")
kind, unknown := filetype.Match(buf)
if unknown != nil {
fmt.Printf("Unknown: %s", unknown)
return
}
fmt.Printf("File type: %s. MIME: %s\n", kind.Extension, kind.MIME.Value)
}
我在生成的二进制文件上对其进行了测试,似乎可以正常工作:
$ ./guess_file
File type: elf. MIME: application/x-executable