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