218

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

4

7 に答える 7

328

これを試して:

require 'open-uri'
open('image.png', 'wb') do |file|
  file << open('http://example.com/image.png').read
end
于 2010-03-25T16:19:47.653 に答える
170

さらに短いバージョン:

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]}")
于 2015-04-20T09:00:48.643 に答える
32

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

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

出典:ペーパークリップのドキュメント

于 2013-03-05T15:27:56.570 に答える
16

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

require 'open-uri'

File.write 'image.png', open('http://example.com/image.png').read
于 2017-10-01T20:12:58.213 に答える
11

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

于 2010-03-25T13:42:17.017 に答える
4

おそらく最も簡単な方法:

require 'open-uri'
image_url = "https://i.imgur.com/ZWnhY9T.png"
IO.copy_stream(URI.open(image_url), 'destination.png')
于 2020-12-19T14:18:09.310 に答える
0

上記の例はすべて素晴らしいです。私の場合、URLの画像からダウンロードリンクを作成したかっただけです。

ダウンロード可能(ダウンロードフォルダー)にする場合は、コントローラーで次のコードを使用できます。

require 'open-uri'
file_type = url.to_s.split(".")[-1]

send_data open(url).read, filename: "some_name.#{file_type}", type: "image/#{file_type}", disposition: "attachment"
于 2021-08-24T09:18:57.717 に答える