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

ayc*_*ter 9 ruby ruby-on-rails

给定变量content_type = "application/pdf",也可以包括任何其他mime类型.

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

我目前有两个解决方案,看起来非常"复杂".

破解字符串

content_type.split("/")[1]
Run Code Online (Sandbox Code Playgroud)

使用MIME :: Types

  require 'mime/types'
  MIME::Types[content_type].first.extensions.first 
Run Code Online (Sandbox Code Playgroud)

有更好的解决方案吗?

ved*_*ant 13

你需要的只是使用ruby的Hash.invert方法.

这个答案显示了如何做到这一点:

Rack::Mime 有这种能力(和Rack是Rails的依赖):

require 'rack/mime'
Rack::Mime::MIME_TYPES.invert['image/jpeg']  #=> ".jpg"
Run Code Online (Sandbox Code Playgroud)

如果您要经常进行查找,您可能希望记住反向哈希,因为它不是一个便宜的操作.

从你的标签来看,无论如何你似乎都在使用rails.


Rob*_*bin 5

您使用mime类型的第二个解决方案是您应该选择的解决方案.有几个原因:

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