File.basename(open(source_url))
不会起作用,因为open(source_url)
返回一些的I/O处理排序,而不是像File.basename
期望的字符串。
File.basename(source_url)
将有更好的工作机会,除非该URL使用某种path/to/service/with/parameters/in/line/like/this
类型编码。
虽然Ruby的URI库有帮助的有用工具。例如:
File.basename(URI.parse(source_url).path)
将是一个起点。例如:
require 'uri'
File.basename(URI.parse('http://www.example.com/path/to/file/index.html').path
# => "index.html"
和:
File.basename(URI.parse('http://www.example.com/path/to/file/index.html?foo=bar').path)
# => "index.html"
你知道,如果我能retreive文件大小也和怎么样?
一个伟大的方式在本地测试HTTP的东西,是运行在命令行gem server
,让宝石启动一个小的web服务器提供的文件:
require 'open-uri'
html_doc = open('http://0.0.0.0:8808/') do |io|
puts io.size
io.read
end
puts html_doc.size
# => 114350
# => 114350
当你使用一个块通过OpenURI的open
命令,可以访问块变量中的很多连接信息,这是Tempfile
类的一个实例。因此,您可以使用size
找出传入文件的大小。
这对小文件OK,但如果你是在一个大的文件拉着你可能要使用的Net :: HTTP发送head
请求,这可能包括大小进行调查。我说可能是,因为有时服务器不知道在动态内容的情况下会返回多少内容,或者CGI或子服务返回的内容无需说明。
使用“头部”请求的好处是服务器不返回整个内容,只是头部。所以,在过去,我已经使用head
作为前言发出请求,以查看我是否可以获取所需的数据。如果不是的话,我会被迫使用正常的get
来完整回复。
谢谢,你知道我是否可以检索文件大小,而不必等待获取文件的所有MB? – ElektroStudios
查看内容长度标题。 – Danyel