How to detect the Content Type of a file in Go

It’s often necessary to detect the content type a file usually for the purpose of determining if an operation is permitted on the file. The Go standard library provides an easy way to check the MIME type of a file through its net/http package.

This package exposes a DetectContentType() method which reads the first 512 bytes of a file and returns a MIME type such as image/png. If it cannot detect the content type of the file, application/octet-stream is returned instead.

resp, err := client.Get("https://freshman.tech/images/dp-illustration.png")
if err != nil {
	log.Fatal(err)
}

defer resp.Body.Close()

// Read the response body as a byte slice
bytes, err := ioutil.ReadAll(resp.Body)
if err != nil {
	log.Fatal(err)
}

mimeType := http.DetectContentType(bytes)
fmt.Println(mimeType) // image/png

The DetectContentType() method supports only a limited number of file types so if you need something more robust than what it offers, consider using the mimetype library which supports a much greater range of file types.

Thanks for reading, and happy coding!