web-dev-qa-db-ja.com

URLからファイルをダウンロードしてRailsに保存するにはどうすればよいですか?

ローカルに保存したい画像のURLがあり、Paperclipを使用してアプリケーションのサムネイルを作成できます。画像をダウンロードして保存する最良の方法は何ですか? (Rubyファイル処理を調べましたが、何も見つかりませんでした。)

185
Alok Swain

これを試して:

require 'open-uri'
open('image.png', 'wb') do |file|
  file << open('http://example.com/image.png').read
end
299
Levi

さらに短いバージョン:

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]}")
128
Clemens Helm

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の一時ファイルシステムでも問題なく機能します。

ペーパークリップはそこからそれを取ります。

ソース: Paperclip documentation

28
superluminary

これが最も明確な方法だと思います。

require 'open-uri'

File.write 'image.png', open('http://example.com/image.png').read
10
Sage Ross

標準ライブラリの Net :: HTTP を確認してください。ドキュメントには、HTTPを使用してドキュメントをダウンロードする方法に関するいくつかの例が記載されています。

8
Pär Wieslander