Как загрузить файл из URL-адреса и сохранить его в Rails?

У меня есть URL-адрес изображения, которое я хочу сохранить локально, так что я могу использовать Paperclip для создания миниатюры для моего приложения. Какой лучший способ загрузить и сохранить изображение? (Я просмотрел обработку файлов ruby, но ничего не обнаружил.)

Ответ 1

Попробуйте следующее:

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

Ответ 2

Еще более короткая версия:

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

Ответ 3

Если вы используете 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.

Скрепка возьмет его оттуда.

источник: документация скрепки

Ответ 4

Отметьте Net:: HTTP в стандартной библиотеке. В документации приведены несколько примеров загрузки документов с использованием HTTP.

Ответ 5

Я думаю, что это самый ясный способ:

require 'open-uri'

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