ローカルに保存したい画像のURLがあり、Paperclipを使用してアプリケーションのサムネイルを作成できます。画像をダウンロードして保存する最良の方法は何ですか? (Rubyファイル処理を調べましたが、何も見つかりませんでした。)
これを試して:
require 'open-uri'
open('image.png', 'wb') do |file|
file << open('http://example.com/image.png').read
end
さらに短いバージョン:
require 'open-uri'
download = open('http://example.com/image.png')
IO.copy_stream(download, '~/image.png')
同じファイル名を保持するには:
IO.copy_stream(download, "~/#{download.base_uri.to_s.split('/')[-1]}")
Paperclipを使用している場合、URLからのダウンロードは自動的に処理されるようになりました。
次のようなものがあると仮定します。
class MyModel < ActiveRecord::Base
has_attached_file :image, ...
end
モデルでは、画像をURLとして指定します。次のようなものです(意図的な長文で記述されています)。
@my_model = MyModel.new
image_url = params[:image_url]
@my_model.image = URI.parse(image_url)
おそらくこれをモデルのメソッドに入れたいと思うでしょう。これは、Herokuの一時ファイルシステムでも問題なく機能します。
ペーパークリップはそこからそれを取ります。
これが最も明確な方法だと思います。
require 'open-uri'
File.write 'image.png', open('http://example.com/image.png').read
標準ライブラリの Net :: HTTP を確認してください。ドキュメントには、HTTPを使用してドキュメントをダウンロードする方法に関するいくつかの例が記載されています。