使用Ruby gem Curb时在服务器上获取文件名

时间:2014-02-20 04:01:07

标签: ruby curb

有没有办法获取正在下载的文件的文件名(无需解析提供的URL)?我希望找到类似的东西:

c = Curl::Easy.new("http://google.com/robots.txt")
c.perform
File.open( c.file_name, "w") { |file| file.write c.body_str }

1 个答案:

答案 0 :(得分:2)

不幸的是,Curb documentation中没有关于轮询文件名的内容。我不知道你是否对解析有特别厌恶,但如果使用URI module,这是一个简单的过程:

require 'uri'
url = 'http://google.com/robots.txt'
uri = URI.parse(url)
puts File.basename(uri.path)
#=> "robots.txt"

<强>更新

在对此问题的评论中,OP建议使用split()通过斜杠(/)拆分网址。虽然这可能适用于大多数情况,但它并不是一个全面的解决方案。例如,版本化文件将无法正确解析:

url = 'http://google.com/robots.txt?1234567890'
puts url.split('/').last
#=> "robots.txt?1234567890"

相比之下,使用URI.parse()保证文件名 - 而文件名 - 返回:

require 'uri'
url = 'http://google.com/robots.txt?1234567890'
uri = URI.parse(url)
puts File.basename(uri.path)
#=> "robots.txt"

总而言之,为了获得最佳的一致性和完整性,最好使用URI库来解析通用资源 - 毕竟它是为它创建的。