それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

mine type から、拡張子を作る。text/javascript ⇛ .js を探す

MIMEタイプから、拡張子を作りたい・・・

一般的には、この逆の、拡張子から、MIME-TYPEを取得することはよくやる。HTTPのヘッダとかさ。

でも、その逆がしたいんだ

>> MIME::Types.type_for( "a.xml" )[0].to_s
=> "application/xml"
>> MIME::Types.type_for( "a.xml" )[1].to_s
=> "text/xml"

この逆に、タイプから拡張子を作りたい。

mime-type にはその、一覧が入っていて手軽に使える

mime-types-2.4.3/data/mime-types.json というファイルがあって、

このJSONをparseして、アレコレして使えば手軽にできそうなんだけど、面倒なのでした。

メソッドを使う。

MIME::Types['text/plain'][0].extensions[0] #=> "txt"

複数拡張子の候補があるので、どれを選ぶかは任意。

MIME::Types['text/html'][0].extensions[0..3] #=> ["html", "htm", "htmlx", "shtml"]

まぁ、一般的には、先頭を選んでおけばいいだろうけど。

js なんかは一個しかないから楽ですね。

MIME::Types['text/javascript'][0].extensions[0] #=> "js"

xml なんかも殆ど無いですね

MIME::Types['text/xml'][0].extensions[0] # => xml
MIME::Types['application/xml'][0].extensions[0] # => xml

参考資料

mine-types : gem パッケージ

https://rubygems.org/gems/mime-types

そのうち、 mine-type.json を取り出したもの

https://gist.github.com/takuya/aac0bcbe2986587c1df7