有没有办法获取正在下载的文件的文件名(无需解析提供的 url)?我希望找到类似的东西:
c = Curl::Easy.new("http://google.com/robots.txt")
c.perform
File.open( c.file_name, "w") { |file| file.write c.body_str }
不幸的是,Curb 文档中没有关于轮询文件名的内容。我不知道您是否对解析有特别的反感,但如果使用该URI
模块,这是一个简单的过程:
require 'uri'
url = 'http://google.com/robots.txt'
uri = URI.parse(url)
puts File.basename(uri.path)
#=> "robots.txt"
更新:
在对这个问题的评论中,OP 建议使用split()
斜杠 ( /
) 来分割 URL。虽然这可能适用于大多数情况,但它不是一个包罗万象的解决方案。例如,版本化文件将无法正确解析:
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
库来解析通用资源是明智之举——毕竟它就是为此而创建的。