Как я могу скачать файл с URL и сохранить его в Rails? - PullRequest
180 голосов
/ 25 марта 2010

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

Ответы [ 5 ]

296 голосов
/ 25 марта 2010

Попробуйте это:

require 'open-uri'
open('image.png', 'wb') do |file|
  file << open('http://example.com/image.png').read
end
123 голосов
/ 20 апреля 2015

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

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]}")
28 голосов
/ 05 марта 2013

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

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

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

10 голосов
/ 01 октября 2017

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

require 'open-uri'

File.write 'image.png', open('http://example.com/image.png').read
8 голосов
/ 25 марта 2010

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

...