2013-08-27 13 views
18

NET :: HTTPのgood examplesがイメージファイルをダウンロードしていましたが、私はgood examplesという一時ファイルを作成しています。しかし、私はどのようにこれらのライブラリを一緒に使うことができないのか分かりません。つまり、バイナリファイルをダウンロードするために一時ファイルの作成をこのコードにどのように組み込むのでしょうか?イメージファイルを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." 
+0

@maerics、私はthを更新しましたe question - – Dogweather

+0

編集を正しく提出しましたか?私はあなたのコードがあなたの最初の例の直接コピーのように思えます。 – Shadwell

+0

そして 'open(" sample.flv ")...'部分をTempfileドキュメントから読み込んだものに置き換えるとどうなりますか? @Shadwell; – maerics

答えて

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

このコードを実行するためにインクルードする必要がある 'require xxx'を入れてください。 –

+0

優秀!それは答えを明確にします。* + 1 * .. –

+4

面白いです。 Ruby 2.0でRailsでこれを実行するとエンコードエラーが発生する:エンコーディング:: UndefinedConversionError:ASCII-8BITからUTF-8 – Dogweather

38

Net::HTTPよりもAPIに優しいライブラリは、たとえばhttpartyのために、あります

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

Rubyの宝石のリンクを教えてください。 –

+0

ありがとう;私はこのようなバイナリモードでhttpartyの例を探していました。 – Dogweather

+0

@Babai done! :) – fguillen

7

私はRestClientを使用したい:

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

クリーンでクリアな

関連する問題