File.basename(open(source_url))
wird nicht funktionieren, weil open(source_url)
gibt ein I/O-Griff einiger Sortierung, keine Zeichenfolge wie File.basename
erwartet.
File.basename(source_url)
würde eine bessere Chance Arbeits haben, es sei denn, die URL etwas path/to/service/with/parameters/in/line/like/this
Typ-Codierung verwendet.
Ruby URI-Bibliothek verfügt über nützliche Tools, um hier zu helfen. Etwas wie:
File.basename(URI.parse(source_url).path)
wäre ein Ausgangspunkt.Zum Beispiel:
require 'uri'
File.basename(URI.parse('http://www.example.com/path/to/file/index.html').path
# => "index.html"
und:
File.basename(URI.parse('http://www.example.com/path/to/file/index.html?foo=bar').path)
# => "index.html"
wissen Sie, wenn ich die Dateigröße retreive kann zu und wie?
Eine gute Möglichkeit, lokal HTTP Sachen zu testen, ist gem server
von der Kommandozeile auszuführen, und lassen Sie Edelsteine einen kleinen Web-Server für seine Dokumentation anwerfen:
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
Wenn Sie einen Block verwenden Mit dem OpenURI-Befehl open
erhalten Sie Zugriff auf viele Informationen über die Verbindung in der Blockvariablen, die eine Instanz der Klasse Tempfile
ist. So können Sie die Größe der eingehenden Datei mit size
herausfinden.
, die für kleine Dateien in Ordnung ist, aber wenn Sie in einer großen Datei ziehen Sie könnten mit Net untersuchen möchten :: HTTP eine head
Anfrage zu senden, die könnte die Größe umfassen. Ich sage könnte, weil manchmal der Server nicht weiß, wie viel zurückgegeben wird, im Falle von dynamischen Inhalten, oder Inhalt wird von einem CGI oder Sub-Service, der nicht die Mühe zu sagen zurückgegeben.
Der Vorteil der Verwendung einer "Kopf" -Anforderung ist, dass der Server nicht den gesamten Inhalt zurückgibt, nur die Header. In der Vergangenheit habe ich also eine Anfrage mit head
eingeleitet, um zu sehen, ob ich die benötigten Daten bekommen könnte. Wenn nicht, wäre ich gezwungen, die volle Antwort mit einem normalen get
zu ziehen.
danke, wissen Sie, ob ich die Dateigröße auch retreive und ohne zu warten, um alle mb der Datei zu bekommen? – ElektroStudios
Schauen Sie sich den Inhalt-Länge-Header an. – Danyel