ファイルからContent-Typeを検出
バイナリの先頭ヘッダ512byte
を読んで取得後、ポインタをもとに戻す
.go
func DetectFileContentType(file *os.File) string {
// 最初の512bytesを読む
buffer := make([]byte, 512)
file.Read(buffer)
// 有効なMIMEタイプでない場合は「application/octet-stream」が返る
contentType := http.DetectContentType(buffer)
// 読み取りポインターをリセットする
file.Seek(0, 0)
return contentType
}
ファイルタイプを調べるライブラリ(h2non/filetype)によっては先頭261byte
だけ読んでるのとかあったんですけど、このヘッダってどこまでとか定義されてたりするんですかね?
(ちなみに上記のライブラリで検出できなかったMP4の動画ファイルがあったのでライブラリ使わず処理を書きました)