Ruby on rails 如何获取给定内容类型的默认扩展名?
给定变量Ruby on rails 如何获取给定内容类型的默认扩展名?,ruby-on-rails,ruby,Ruby On Rails,Ruby,给定变量content\u type=“application/pdf”,该变量还可以包括任何其他mime类型 如何获取内容类型的默认扩展名 我目前有两个解决方案,看起来非常“复杂” 破解字符串 content_type.split("/")[1] 使用MIME::类型 require 'mime/types' MIME::Types[content_type].first.extensions.first 有更好的解决方案吗?mime类型的第二个解决方案是您应该选择的解决方案。这
content\u type=“application/pdf”
,该变量还可以包括任何其他mime类型
如何获取内容类型的默认扩展名
我目前有两个解决方案,看起来非常“复杂”
破解字符串
content_type.split("/")[1]
使用MIME::类型
require 'mime/types'
MIME::Types[content_type].first.extensions.first
有更好的解决方案吗?mime类型的第二个解决方案是您应该选择的解决方案。这有几个原因:
- 第二个解决方案完全是为您的用例设计的
可能不一致或返回意外结果(想想Hack字符串
具有扩展名application/postscript
!)eps
Hash.invert
方法
演示如何执行此操作:
具有此功能(机架依赖于Rails):
如果要经常查找,您可能希望将反向散列存储起来,因为这不是一个便宜的操作
从您的标签来看,似乎您正在使用rails。MimeMagic
除了以上的答案,我个人喜欢使用
TL;博士
MimeMagic的其他可能有用的功能
MimeMagic.new('image/jpeg').image? #=> true
MimeMagic.by_magic('<?xml version="1.0" ?><test></test>').type #=> 'application/xml'
MimeMagic.by_extension('.html').type #=> 'text/html'
因此,我突然看到一些
xml
文件被保存为.xsl
扩展名。使用了第二种解决方案,效果非常好。顺便说一下,在rails应用程序中,我不需要mime/类型。
require 'mimemagic'
MimeMagic.new('image/jpeg').extensions.first #=> 'jpg'
# Note that this does not include the dot (.) in the extension.
MimeMagic.new('image/jpeg').image? #=> true
MimeMagic.by_magic('<?xml version="1.0" ?><test></test>').type #=> 'application/xml'
MimeMagic.by_extension('.html').type #=> 'text/html'
MimeMagic.new('application/xml').extensions #=> ["xml", "xbl", "xsd", "rng"]
Rack::Mime::MIME_TYPES.invert['application/xml'] #=> ".xsl"