Так что это должно быть довольно легко, но я не могу заставить его работать.
У меня есть метод контроллера, который находит изображение на основе запроса, затем вывод кэшируется. Изображение может быть удаленным (flickr, google images и т.д.), Или оно может быть локальным. Независимо от источника, мне просто нужно взять содержимое файла изображения и передать его пользователю. По существу, прокси. Прохождение через удаленные изображения, кажется, работает нормально, но прохождение через локальные изображения дает мне:
invalid byte sequence in UTF-8
Итак, вот что я получил. Я надеюсь, что кто-то сможет решить проблему или вести меня в лучшем направлении с моим кодом.
def image_proxy
query = params[:query]
image_url = get_image_url(query) # returns an absolute local file path or a URL
response.headers['Cache-Control'] = "public, max-age=#{12.hours.to_i}"
response.headers['Content-Type'] = 'image/jpeg'
response.headers['Content-Disposition'] = 'inline'
render :text => open(image_url).read
end
Удаленные файлы работают нормально, локальные файлы не работают.
Бонус для всех, кто может помочь решить эту проблему:
- Мне нужно установить правильный тип контента. Удаленные URL-адреса изображений не говорят мне тип изображения, я просто получаю URL-адрес, и иногда URL-адрес не содержит расширение. Поэтому я выбрал jpeg, потому что он работает независимо от типа изображения, отправленного мне.
Спасибо!