Как я могу получить изображение по прямой ссылке в рубине? - PullRequest
0 голосов
/ 23 января 2019

Я извлекаю записи с веб-сайта и пытаюсь сохранить одно из возвращаемых изображений (файл BMP).Проблема в том, что сайт возвращает только прямую ссылку на скачивание, без предварительного просмотра.Очень похоже на эту ссылку (но вместо этого у меня BMP, а не PDF)

Там нет предварительного просмотра, только немедленная загрузка.

Похоже, что нетспособ создать другую ссылку, и я не знаю, как обрабатывать этот URL с помощью рельсов!Мне просто нужно сохранить его в моем дереве проекта / локального файла.Есть идеи?

1 Ответ

0 голосов
/ 23 января 2019

Вы должны выполнить 3 операции: получить содержимое URL, записать его на диск и прикрепить к вашей модели.

Получить содержимое URL

В Ruby есть различные библиотеки для обработки HTTP-запросов на получение.Конечно, есть стандартная библиотека Net :: HTTP и другие гемы клиента HTTP, как указано max .Я использовал некоторые из них, мой любимый выбор - http.rb , но вы можете выбрать все, что захотите.

Записать поток на диск

Вы должны выбрать папку ивведите имя файла и напишите поток.

Прикрепите данные к модели

Также есть несколько драгоценных камней для работы с вложениями .Если вы предпочитаете ActiveStorage , вы можете проверить метод attach

Наивная реализация может выглядеть так:

# You can use and other HTTP gem or standard Net::HTTP
gem 'http'
require 'http'

url = 'https://www.ruby-lang.org/images/header-ruby-logo.png'

# You can set timeouts and other options here
response = HTTP.follow(max_hops: 2).get(url)

# You can check for statuses or other responses
return if response.status != 200 || response.content_type.nil?

# You can grab filename from url or set another filename
filename = SecureRandom.hex

path = File.join('tmp', filename)

# Write stream somewhere
file = File.open(path, 'wb')
 response.body.each do |chunk|
  file.write(chunk)
end

# Suppose you use ActiveStorage, you can use the `attach` method
your_model.you_attribute.attach(
   io: File.open(path),
   filename: filename,
   content_type: response.content_type.mime_type
 )



Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...