Rails -nokogiri GEM:检测 URL 中图像的 MIME 类型

Posted

技术标签:

【中文标题】Rails -nokogiri GEM:检测 URL 中图像的 MIME 类型【英文标题】:Rails -nokogiri GEM: Detect MIME type of image in URL 【发布时间】:2015-12-04 01:50:12 【问题描述】:

我正在使用 gem nokogiri 来废弃 img 标签 src 值。 有时url 不显示带有扩展名的图像文件名。

所以我尝试检测图片MIME类型如下:

MIME::Types.type_for("http://web.com/img/12457634").first.content_type # => "image/gif"

但它显示错误:

undefined method `content_type' for nil:NilClass (NoMethodError)

有什么办法吗?

【问题讨论】:

是的,效果很好。 太棒了 :) 很高兴听到这个消息 :) 【参考方案1】:

你得到这个错误:

undefined method `content_type' for nil:NilClass (NoMethodError)

因为MIME::Types.type_for("http://web.com/img/12457634").first 对象有时是nil

要避免此问题,请执行以下操作:

MIME::Types.type_for("http://web.com/img/12457634").first.try(:content_type)

因此,如果它是nil,它不会使您的程序崩溃。如果不是nil,你会得到正确的content_type

或者,要使用Net::HTTP 检查图像的Content-Type 标头,您可以编写如下方法:

def valid_image_exists?(url)
    url = URI.parse(url)
    Net::HTTP.start(url.host, url.port) do |http|
      return http.head(url.request_uri)['Content-Type'].start_with? 'image'
    end
end

【讨论】:

以上是关于Rails -nokogiri GEM:检测 URL 中图像的 MIME 类型的主要内容,如果未能解决你的问题,请参考以下文章

LoadError:无法加载“听”gem(Rails 5)

如何将 Rails 视图助手提取到 gem 中?

“RAILS_GEM_VERSION”设置到底有啥作用?

设置 RSpec 以测试 gem(不是 Rails)

Rails 4 Auditing Gem [关闭]

在 gem 中使用 rails 作为依赖项