How to get the MIME type of a file in Go

Determining the MIME type of a file in Go can be crucial for handling file uploads, processing, and security checks. Go provides an efficient way to detect MIME types using the net/http and mime packages.

Using the net/http Package

The net/http package provides the DetectContentType function, which is useful for detecting the MIME type of a file based on its initial bytes.

package main

import (
    "fmt"
    "net/http"
    "os"
)

func main() {
    file, err := os.Open("example.txt")
    if err != nil {
        fmt.Println("Error opening file:", err)
        return
    }
    defer file.Close()
    
    buffer := make([]byte, 512)
    _, err = file.Read(buffer)
    if err != nil {
        fmt.Println("Error reading file:", err)
        return
    }
    
    mimeType := http.DetectContentType(buffer)
    fmt.Println("MIME Type:", mimeType)
}

This method reads the first 512 bytes of the file and determines the MIME type.

Using the mime Package

The mime package provides functions to get the MIME type based on the file extension.

package main

import (
    "fmt"
    "mime"
    "path/filepath"
)

func main() {
    filename := "example.png"
    ext := filepath.Ext(filename)
    mimeType := mime.TypeByExtension(ext)
    fmt.Println("MIME Type:", mimeType)
}

This approach is useful when the file's content is not available but its extension is known.

Conclusion

To determine the MIME type of a file in Go, you can use http.DetectContentType for content-based detection or mime.TypeByExtension for extension-based detection. Depending on your use case, either approach can be useful.

Back to top