26

イメージ ファイルをダウンロードするための NET::HTTP の良いと、一時ファイルを作成する良い例を見つけました。しかし、これらのライブラリを一緒に使用する方法がわかりません。つまり、バイナリ ファイルをダウンロードするために、一時ファイルの作成をこのコードにどのように組み込むのでしょうか?

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."
4

5 に答える 5

47

httpartyNet::HTTPなど、よりも API に適したライブラリがあります。

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
于 2013-08-27T20:18:35.890 に答える
17
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> 
于 2013-08-27T20:20:48.937 に答える