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

Ruby:如何下载未知格式的文件?,ruby,Ruby,我想从各种URL下载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.

我想从各种URL下载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


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

通过调用
Mechanize\get
收到的是
Mechanize::Image
对象的一个实例,该对象包含大量有关图像本身的信息

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

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

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

不过,在这种特殊情况下,我相信
情况下,当
足够了。

通过调用
Mechanize#get
接收到的是
Mechanize::Image
对象的一个实例,它有很多关于图像本身的信息

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

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

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

不过,在这种特殊情况下,我相信当
时的
情况就足够了。

内容类型
是正确的方法,但您应该使用gem/库为给定的MIME类型查找适当的扩展名(或者您还可以使用
.jpeg
.x-icon
文件),当我执行
get.save”图像/pic.#{ext}
,如果存在同名文件,该文件将被重命名为
pic2
。我如何使其替换现有文件?@cqcn1991
Mechanize
负责不重写文件。我不确定,如果有方法指示它重写现有文件,我将使用纯ruby
文件。删除(文件名)如果File.exist?(filename)
获取.save之前
内容类型
是正确的方法,但是您应该使用gem/库来查找给定MIME类型的正确扩展名(或者您可以在执行
获取.image/pic.#{ext}
操作时,添加
jpeg
x-icon
文件),如果存在同名文件,则该文件将重命名为
pic2
。如何使其替换现有的?@cqcn1991
Mechanize
负责不重写文件。我不确定,如果有方法指示它覆盖现有文件,我会在
get.save
之前使用纯ruby
File.delete(filename)if File.exist?(filename)