有没有办法获取正在下载的文件的文件名(无需解析提供的URL)?我希望找到类似的东西:
c = Curl::Easy.new("http://google.com/robots.txt")
c.perform
File.open( c.file_name, "w") { |file| file.write c.body_str }
答案 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
库来解析通用资源 - 毕竟它是为它创建的。