【问题标题】:How to get the default extension for a given content type?如何获取给定内容类型的默认扩展名?
【发布时间】:2013-01-24 02:36:54
【问题描述】:

假设变量content_type = "application/pdf" 也可以包含任何其他mime 类型。

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

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

破解字符串

content_type.split("/")[1]

使用 MIME::Types

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

有没有更好的解决方案?

【问题讨论】:

  • 使用了你的第二个解决方案,效果很好。顺便说一句,在 Rails 应用程序中,我不需要 mime/types。

标签: ruby-on-rails ruby


【解决方案1】:

您只需要使用 ruby​​ 的 Hash.invert 方法即可。

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

Rack::Mime 有这个能力(而 Rack 是 Rails 的一个依赖):

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

如果您要经常进行查找,您可能希望记住倒置哈希,因为这不是一项廉价的操作。

从你的标签看来,你还是在使用 rails。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      MimeMagic

      除了以上答案,我个人比较喜欢用MimeMagic

      require 'mimemagic'
      MimeMagic.new('image/jpeg').extensions.first #=> 'jpg'
      # Note that this does not include the dot (.) in the extension.
      

      TL;DR;

      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'
      

      我最近从Rack::Mime 移动到MimeMagic,因为我还尝试从文件内容中检测 Mime 类型是什么。为了确保这是反向兼容的,我需要使用 MM 进行所有方向的转换:

      • 内容 > Mime 类型
      • Mime 类型 > 扩展名
      • 扩展名 > Mime 类型

      不同的结果

      我切换的主要原因是在将application/xml翻译成扩展名时的不同:

      MimeMagic.new('application/xml').extensions #=> ["xml", "xbl", "xsd", "rng"]
      Rack::Mime::MIME_TYPES.invert['application/xml'] #=> ".xsl"
      

      突然间,我看到一些xml 文件以.xsl 扩展名保存。

      【讨论】:

        猜你喜欢
        • 2012-02-06
        • 2011-05-27
        • 2011-07-29
        • 1970-01-01
        • 2014-05-30
        • 2010-12-26
        • 2014-02-07
        • 2020-10-16
        • 2011-12-15
        相关资源
        最近更新 更多