LoginSignup
23
20

More than 5 years have passed since last update.

【個人メモ】GoのビルトインライブラリでファイルのMIME Typeを推測したい場合

Last updated at Posted at 2014-09-01

net/httpパッケージを使えば良い

net/httpのDetectContentType関数を使うと楽だ。
実装はここ

標準入力からファイルを読み込み、MIME Typeを出力する簡易なスクリプトを書く。

mime.go
package main

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

func main() {
    bytes, err := ioutil.ReadAll(os.Stdin)

    if err != nil {
        panic(err)
    }

    mimeType := http.DetectContentType(bytes)

    fmt.Printf("MIME Type: %s\n", mimeType)
}

試す

goのソースコード

./mime < mime.go
MIME Type: text/plain; charset=utf-8

バイナリファイル

./mime < mime
MIME Type: application/octet-stream

htmlファイル

./mime < test.html
MIME Type: text/plain; charset=utf-8

bmpファイル

./mime < test.bmp
MIME Type: image/bmp

jpegファイル

./mime < test.jpg
MIME Type: image/jpeg

pdfファイル

./mime < test.pdf
MIME Type: application/pdf

wav

./mime < test.wav
MIME Type: audio/wave

mp3

./mime < test.mp3
MIME Type: application/octet-stream

mp4

./mime < test.mp4
MIME Type: application/octet-stream

使用感

magicコマンド程ではないにせよ
こういうライブラリをGoは包含してるのはいいと思う。
自己完結ライブラリで作り上げれば、クロスコンパイル楽だし。

ただ、バイナリに関してはほぼ推測されない。そのため、
magicコマンド相当のものが欲しければ、
magicmimeを使おう。

ただし、この場合は環境ごとにlibmagicをインストールし、
ライブラリとリンクできる状態にならなければならないため、
可搬性は低くなる。

23
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
20