2009-07-02 28 views

Trả lời

50

require "open-uri" 

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


+1

Bạn cần thêm "require 'open-uri'" để làm việc này. – Keltia

+0

vâng, tôi quên thêm nó vào phiên bản đầu tiên. – Geo

+4

theo cách tiếp cận, nếu bạn đang sử dụng Windows (không giống như OP), bạn sẽ cần mở tệp ở chế độ nhị phân: File.open (tên tệp, 'w'). Binmode do | file | ... –

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

hoặc

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

đây không phải là di động. – Geo

+1

có thể. Nhưng anh ấy hỏi một thứ có thể hoạt động trên Mac. –

+0

Điều này không hoạt động trên hệ điều hành MacOS. Không, trừ khi bạn cài đặt cụ thể 'wget'. Bạn đã đề xuất 'curl' (mặc định), nó có thể chấp nhận được hơn. – user137369

0

Cách đơn giản nhất sẽ được yêu cầu open-uri và sử dụng rằng với câu trả lời trước hoặc sử dụng cũng cung cấp mô-đun Net :: HTTP với method get của nó.

2

Nếu bạn muốn tải về tất cả các hình ảnh trên một trang, bạn có thể sử dụng đá quý 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

Hãy thử sử dụng đá quý mechanize:

Bắt đầu với: sudo gem install mechanize để cài đặt mechanize.

Sau đó:

require 'rubygems' 
require 'mechanize' 

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

EDIT: Để làm cho mọi việc dọn dẹp tôi sẽ đề nghị bạn sử dụng tên của tập tin bản thân khi bạn lưu hình ảnh. Tôi đã gặp sự cố khi lưu hình ảnh hàng loạt vì chúng không được định dạng chính xác. Các hình ảnh được lưu như thế này:

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

Thats lý do tại sao bạn nên sử dụng tên hình ảnh như tên tập tin như thế này:

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

File.basename mất url hình ảnh và chỉ trả về các thực tế tên hình ảnh:

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

Để làm cho mọi thứ sạch hơn, tôi khuyên bạn nên sử dụng tên của Tệp khi bạn lưu hình ảnh. Tôi đã gặp sự cố khi lưu hình ảnh hàng loạt vì chúng không được định dạng chính xác. Các hình ảnh được lưu như thế này:

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

Thats lý do tại sao bạn nên sử dụng tên hình ảnh như tên tập tin như thế này:

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

File.basename mất url hình ảnh và chỉ trả về các thực tế tên hình ảnh:

File.basename("http://www.asite.com/pic.jpg") 
# returns the image name 
pic.jpg 
Các vấn đề liên quan