2009-07-02 10 views

risposta

50

require "open-uri" 

open("your-url") {|f| 
    File.open("whatever_file.jpg","wb") do |file| 
    file.puts f.read 
    end 
} 


+1

È necessario aggiungere "require 'open-uri'" affinché funzioni. – Keltia

+0

sì, ho dimenticato di aggiungerlo nella prima versione. – Geo

+4

tangenzialmente, se sei su Windows (a differenza dell'OP), dovrai aprire il file in modalità binaria: File.open (nomefile, 'w'). Binmode do | file | ... –

0
%x(wget http://farm1.static.flickr.com/92/218926700_ecedc5fef7_o.jpg) 

o

`wget http://farm1.static.flickr.com/92/218926700_ecedc5fef7_o.jpg` 
+2

non è portatile. – Geo

+1

forse. Ma ha chiesto qualcosa che avrebbe funzionato su Mac. –

+0

Questo non funziona su macOS. A meno che non si installi in modo specifico 'wget'. Se tu avessi suggerito "arricciatura" (che per impostazione predefinita), sarebbe stato più accettabile. – user137369

0

Il modo più semplice sarebbe quella di richiedere open-uri e l'uso che la risposta precedente o utilizzare il modulo fornito anche Net :: HTTP con il suo metodo get.

2

Se volete scaricare tutte le immagini in una pagina, è possibile utilizzare la gemma image_downloader:

require 'rubygems' 
require 'image_downloader' 

downloader = ImageDownloader::Process.new('www.test.com','img_dir/') 

downloader.parse(:any_looks_like_image => true) 

downloader.download() 
15

Provare a usare la gemma Mechanize:

Inizia con: sudo gem install mechanize per installare Mechanize.

Poi:

require 'rubygems' 
require 'mechanize' 

agent = Mechanize.new 
link = 'http://www.asite.com/pic.jpg' 
agent.get(link).save "images/pic.jpg" 

EDIT: Per rendere le cose più pulito vorrei suggerire di usare il nome del file stesso quando si salva l'immagine. Ho riscontrato un problema nel salvataggio di immagini collettive perché non erano formattate correttamente. Le immagini sono state salvate in questo modo:

#pic.jpg(1) 
#pic.jpg(2) 
#etc. 

Ecco perché probabilmente si dovrebbe utilizzare il nome dell'immagine come il nome del file in questo modo:

agent.get(src).save "images/#{File.basename(url)}" 

File.basename prende l'URL dell'immagine e restituisce solo il reale nome dell'immagine:

File.basename("http://www.asite.com/pic.jpg") 
# returns the image name 
pic.jpg 
0

Per rendere le cose più pulite, suggerisco di utilizzare il nome del file stesso quando si salva l'immagine. Ho riscontrato un problema nel salvataggio di immagini collettive perché non erano formattate correttamente. Le immagini sono state salvate in questo modo:

#pic.jpg(1) 
#pic.jpg(2) 
#etc. 

Ecco perché probabilmente si dovrebbe utilizzare il nome dell'immagine come il nome del file in questo modo:

src = 'http://www.asite.com/pic.jpg'  
agent.get(src).save "#{folder}/#{File.basename(src)}" 

File.basename prende l'URL dell'immagine e restituisce solo il reale nome dell'immagine:

File.basename("http://www.asite.com/pic.jpg") 
# returns the image name 
pic.jpg 
Problemi correlati