Rubyでバイナリファイルをダウンロードする
画像などをRubyスクリプト上からダウンロードする
日々の作業で出てきた技術メモの切れ端を置いておくページ
画像などをRubyスクリプト上からダウンロードする
require 'open-uri'
URI.open('https://example.com/sample.jpg', 'rb') do |image|
File.open('./image.jpg', 'wb') do |file|
while (binary = image.read(256))
file.write(binary)
end
end
end
wb
rb
といったbのついたモードを使うというのがポイント。 image.read
とかやると全部メモリに載ってしまうのでreadで少しずつ取ってきて書き込み、ということをしている。
上記のようにURI.openにstringリテラルを渡している場合は良いが、外部からの入力によってURLを組み立てているケースなどでは注意が必要とのこと。下記のRubocopルールに引っかかって知った。
上記ページにも書いているが URI.parse(url).open('rb') do ...
とするのが良い