2013-02-08 5 views
6

変数content_type = "application/pdf"には、他の任意のMIMEタイプも含めることができます。特定のコンテンツタイプのデフォルトの拡張子を取得する方法は?

どのようにしてコンテンツタイプのデフォルトの拡張子を取得できますか?

私は現在、2つの解決策を持っていますが、これは非常に「複雑な」ものです。

content_type.split("/")[1] 

利用MIME ::タイプ

require 'mime/types' 
    MIME::Types[content_type].first.extensions.first 

文字列をハックよりよい解決策はありますか?

+0

2番目のソリューションを使用して、魅力的に働きました。ところで、レールアプリでは、私はMIME /タイプを必要としませんでした。 –

答えて

3

mimeタイプを使用した2番目のソリューションがソリューションであり、これを選択する必要があります。そのため、いくつかの理由があります。

  • 第二の溶液を正確にご使用の場合のために設計されて
  • Hack the stringは矛盾するか、予期しない結果を返す(約application/postscriptは拡張子epsを持っていると思います!)でした
  • ご検討ください、すべてのMIMEタイプにデフォルトの拡張子が付いているとは言えません。たとえば、誰がjpg(またはjpegまたはJPG ..)画像のデフォルトの拡張子を定義していますか?
8

ルビーのHash.invertメソッドを使用する必要があります。

This answerはそれを行う方法を示しています。あなたがいる場合は、逆ハッシュをmemoizeしたいと思うかもしれ

require 'rack/mime' 
Rack::Mime::MIME_TYPES.invert['image/jpeg'] #=> ".jpg" 

Rack::Mimeはこの能力を(およびラックがレールの依存性である)があります安価な操作ではないので、検索を頻繁に行います。

あなたのタグからは、とにかくレールを使用しているようです。

関連する問題