2013-08-27 18 views
18

Bir görüntü dosyasını indirmek için NET :: HTTP'nin good examples numaralı sayfasını bulduk ve bir geçici dosya oluşturma konusunda good examples ürününü buldum. Fakat bu kütüphaneleri nasıl birlikte kullanabileceğimi göremiyorum. I.e., bir ikili dosyayı indirmek için temp dosyasının oluşturulması bu kodda nasıl işlenir?Bir görüntü dosyasını HTTP aracılığıyla bir geçici dosyaya nasıl indirebilirim?

require 'net/http' 

Net::HTTP.start("somedomain.net/") do |http| 
    resp = http.get("/flv/sample/sample.flv") 
    open("sample.flv", "wb") do |file| 
     file.write(resp.body) 
    end 
end 
puts "Done." 
+0

@maerics, th güncellendi e soru - – Dogweather

+0

Düzenlemeyi doğru bir şekilde gönderdiniz mi? Aksi halde kodunuzun, ilk örneğinizin doğrudan bir kopyası gibi göründüğünden şüpheleniyorum. – Shadwell

+0

Ve 'open (" sample.flv ") ...' kısmını Tempfile belgelerinden okuduğunuz şeylerle değiştirdiğinizde ne olur? – maerics

cevap

12
require 'net/http' 
require 'tempfile' 
require 'uri' 

def save_to_tempfile(url) 
    uri = URI.parse(url) 
    Net::HTTP.start(uri.host, uri.port) do |http| 
    resp = http.get(uri.path) 
    file = Tempfile.new('foo', Dir.tmpdir, 'wb+') 
    file.binmode 
    file.write(resp.body) 
    file.flush 
    file 
    end 
end 

tf = save_to_tempfile('http://a.fsdn.com/sd/topics/transportation_64.png') 
tf # => #<File:/var/folders/sj/2d7czhyn0ql5n3_2tqryq3f00000gn/T/foo20130827-58194-7a9j19> 
+2

, lütfen bu kodu çalıştırmak için eklemeniz gereken 'xxx' gerektirir. –

+0

Mükemmel şimdi! cevabı netleştirir .. * + 1 * .. –

+4

İlginç. Bunu raylar içinde ruby ​​2.0 ile çalıştıran bir kodlama hatası alıyorum: Encoding :: UndefinedConversionError: "\ x89" ASCII-8BIT'den UTF-8'e – Dogweather

38

Net::HTTP fazla api dostu kütüphaneler örneğin httparty için vardır:

require "httparty" 

url = "https://upload.wikimedia.org/wikipedia/commons/thumb/9/91/DahliaDahlstarSunsetPink.jpg/250px-DahliaDahlstarSunsetPink.jpg" 

File.open("/tmp/my_file.jpg", "wb") do |f| 
    f.write HTTParty.get(url).body 
end 
+0

cevabın Ruby gem bağlantısını verin lütfen .. –

+0

Teşekkürler; Bunun gibi ikili modda bir httparty örneği arıyordum. – Dogweather

+0

@Babai tamamlandı! :) – fguillen

7

Ben RestClient kullanmak ister:

file = File.open("/tmp/image.jpg", 'wb') do |output| 
    output.write RestClient.get("http://image_url/file.jpg") 
    end 

temiz ve berrak

İlgili konular