первый вопрос, надеюсь, я не напутал:)
Немного новичка по Ruby on Rails (также новичка по Ruby), который наткнулся на проблему с предполагаемым поведением приложения.
У меня есть file_column: изображение на изображении модели, принадлежащее модельному продукту, которое может иметь много изображений.
file_column прекрасно работает при использовании, так как я думаю, что он предназначен для использования и предназначен для загрузки изображений с использованием <% = file_column_field "picture", "image"%> и т. Д. Эта часть работает просто отлично.
Проблема возникает из-за наличия текстового поля, в котором пользователь может ввести css -selector для тега изображения на своем сайте (он зарегистрировал сайт и путь к странице, где должно быть изображение). Я не смог понять, как правильно загрузить изображение с этого другого сайта "под капотом".
Использование этих двух методов приводит к Не знаю, как обрабатывать строку со значением 'GIF89ad ..... , за которой следуют загрузки "двоичного".
Метод 1:
url = URI.parse(picture_www.external_url)
Net::HTTP.start(url.host, url.port) {|http|
resp = http.get(url.path)
picture_www.image = resp.body unless resp.nil?
}
Метод 2:
res = open(picture_www.external_url)
picture_www.image = res.read unless res.nil?
external_url содержит правильный URL-адрес, и загрузка идет нормально, так что, похоже, проблема в том, как я пытаюсь присвоить изображение полю file_column. Естественно, проблема может быть в том, как я загружаю образ, я понятия не имею, где, собственно, и заключается проблема ...:)
Кто-нибудь может мне помочь, пожалуйста?
Обновление:
Попытка использовать временный файл "вызывает неопределенный метод 'original_filename' для" и т. Д.
Net::HTTP.start(url.host, url.port) {|http|
resp = http.get(url.path)
tempfile = Tempfile.new('test.jpg')
File.open(tempfile.path, 'wb') do |f|
f.write resp.body
end
picture_www.image = tempfile unless resp.nil?
}
Update2:
Отладка показывает, что загруженный файл имеет атрибуты @content_type (например, «image / jpeg») и @original_path (имя файла без пути) в @_dc_obj и @tmpfile, когда созданный мной временный файл не имеет. Правильно ли их настроить, возможно, это сработает? Как мне правильно их настроить? И если правильно установить эти значения, будет ли загрузка файла выполнена "правильно"? После конечно же реструктуризации кода я получаю рабочее решение.
Update3:
Из ответа Минвера я получил решение проблемы "original_filename", и этот код, похоже, работает:
io = open(picture_www.external_url)
def io.original_filename; base_uri.path.split('/').last; end
io.original_filename.blank? ? nil : io
picture_www.image = io
Не знаю, правда, если это «правильный» способ сделать это или нет, но это то, что я буду использовать сейчас, если не появится какое-то «явно верное решение»:)
-Pkauko