2013-02-08 63 views
6

给定变量content_type = "application/pdf"也可以包含任何其他MIME类型。如何获得给定内容类型的默认扩展名?

如何获取内容类型的默认扩展名?

我目前有两种解决方案,看起来很“复杂”。

哈克字符串

content_type.split("/")[1] 

使用MIME类型::

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

有没有更好的解决办法?

+0

使用你的第二个解决方案,像一个魅力工作。顺便说一下,在rails应用程序中,我不需要mime/types。 –

回答

3

您的第二种MIME类型解决方案是您应该选择的解决方案。有几个原因:

  • 第二个解决方案正是专为你的使用情况
  • Hack the string可能不一致或返回意外的结果(!想想application/postscript已经扩展eps
  • 请考虑,我们可能不能说每个MIME类型都有默认的扩展名。例如:谁定义了jpg(或jpeg或JPG ..)图像的默认扩展名?
8

所有你需要的是使用ruby的Hash.invert方法。

This answer展示了如何做到这一点:

Rack::Mime有这个能力(和机架导轨是一个依赖):

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

你可能希望,如果你到memoize的倒散经常进行查找,因为这不是一种廉价的操作。

从您的标签看来,您似乎正在使用导轨。

相关问题