2010-12-05 5 views
16

Ich verwende Mechanize, um das Herunterladen einiger Dateien zu erleichtern. Im Moment nutzt mein Skript die folgende Zeile, um tatsächlich die Dateien herunterladen ...Verwenden von WWW: Mechanize, um eine Datei auf die Festplatte zu laden, ohne sie zuerst in den Speicher zu laden

agent.get('http://example.com/foo').save_as 'a_file_name' 

Doch diese lädt die komplette Datei in den Speicher, bevor es auf die Festplatte Dumping. Wie umgehen Sie dieses Verhalten und laden Sie einfach direkt auf die Festplatte herunter? Wenn ich etwas anderes als WWW verwenden muss: Mechanize, wie würde ich dann mit WWW umgehen: Mechanize's Cookies damit?

+0

Bitte beachten Sie, dass die 'Mechanize :: File' Klasse nicht für große Dateien geeignet ist . In diesen Fällen sollte man stattdessen die 'Mechanize :: Download'-Klasse verwenden, da sie den Inhalt in kleinen Blöcken auf die Festplatte herunterlädt. Weitere Informationen finden Sie [hier] (http://www.rubydoc.info/gems/mechanize/Mechanize/PluggableParser) und [hier] (http://www.rubydoc.info/gems/mechanize/Mechanize/Download). – pierrebonbon

Antwort

2

Haben Sie sich Mechanize::FileSaver angesehen? Es sieht so aus, als könne es tun, was Sie brauchen. Hier

ist ein Beispiel, das alle PDF-Dateien speichert es Begegnungen:

require 'rubygems' 
require 'mechanize' 

agent = Mechanize.new 
agent.pluggable_parser.pdf = Mechanize::FileSaver 
agent.get('http://example.com/foo.pdf') 
36

Was Sie wirklich wollen, ist das Mechanize :: Herunterladen

http://mechanize.rubyforge.org/Mechanize/Download.html

Sie auf diese Weise verwenden können:

require 'mechanize' 

agent = Mechanize.new 
agent.pluggable_parser.default = Mechanize::Download 
agent.get('http://example.com/foo').save('a_file_name') 
+0

Ich würde hinzufügen, dass ich genau Ihre Lösung verwendet habe, außer dass ich Mechanize: FileSaver anstelle von Mechanize: Download hatte. Und das hat nicht funktioniert => Dateien sind auf der Festplatte gespeichert, aber ohne Inhalt..0 kb. Ich habe es gerade durch Download ersetzt und das Ganze ist perfekt :) Danke – Mik378

+3

Wo wird die Datei gespeichert? – carbonr

+1

@carbonr mit 'agent.get (url) .save (Datei.join (dir, filename))' Die Datei wird in dem angegebenen Verzeichnis gespeichert. – bfcoder

Verwandte Themen