Ruby:如何下载未知格式的文件?

时间:2016-05-09 13:02:02

标签: ruby

我想从各个网址下载favicon,所以我这样做:

  require 'mechanize'
  agent = Mechanize.new
  link = 'http://www.google.com/s2/favicons?domain_url=blog.ycombinator.com/'
  agent.get(link).save "images/pic.png"

问题在于,我怎么知道http://www.google.com/s2/favicons?domain_url=blog.ycombinator.com/返回的是.png?不是.ico,不是.jpg

将它保存为不同格式会产生任何问题吗?我应该如何相应地保存文件?

1 个答案:

答案 0 :(得分:4)

通过调用Mechanize#get收到的内容是Mechanize::Image对象的实例,其中包含大量有关图像本身的信息。

▶ got = agent.get link
#⇒ #<Mechanize::Image:0x00000005315e48 ...>

▶ ext = got.response['content-type'].split('/').last
#⇒ "png"

▶ got.save "images/pic.#{ext}"

除了内容类型之外,返回的对象还有另一个要考虑的信息,例如: G。请求是否成功。

正如@Stefan在评论中指出的那样,应该使用gem /库来确定MIME类型的正确扩展名:

▶ require 'rack/mime'
▶ Rack::Mime::MIME_TYPES.key(got.response['content-type']) 
#⇒ ".png"

但在这种特殊情况下,我相信case-when足够了。