Как проверить, было ли изображение найдено на веб-сайте? - PullRequest
7 голосов
/ 26 августа 2011

Я использую Ruby on Rails v3.0.9, и я хотел бы проверить, было ли изображение (в моем случае favicon.ico изображение значка) успешно получено с веб-сайта, и еслине хочу отображать пользовательское изображение .

Чтобы получить изображение favicon.ico, связанное с веб-сайтом, в моем файле просмотра у меня есть:

image_tag "#{web_site.link}/favicon.ico", :size => "16x16"

где web_site.link значения похожи на следующие:

http://stackoverflow.com/
http://www.stackoverflow.com/
http://facebook.com/
...

Как проверить, было ли изображение найдено на веб-сайте (возможно, с помощью оператора if ... else ... end или выполнения некоторого HTTPзапрос, прежде чем обрабатывать изображения favicon) и как обработать вышеуказанный сценарий?

Ответы [ 2 ]

6 голосов
/ 26 августа 2011

Вот как реализовать идею, которая была у вас в исходном вопросе.

Проблема этого подхода заключается в том, что время вашего ответа будет включать в себя столько времени, сколько потребуется другому домену, чтобы ответить на ваш запрос изображения. Если этот сайт имеет проблемы, то ваша страница не будет загружаться до истечения времени ожидания запроса.

<%
img_url = 'http://adomain.com/image.jpg'
res = Net::HTTP.get_response(URI.parse(img_url))
img_url = '[my alternate url]' unless res.code.to_i >= 200 && res.code.to_i < 400 #good codes will be betweem 200 - 399
%>

<%=image_tag img_url%>

Подход jQuery немного сложнее. Я бы предложил что-то вроде следующего:

  • создание тега <img> с прозрачным разделительным изображением
  • в javascript страницы выполните вызов $.ajax для удаленного образа
    • при успешном обратном вызове замените src <img> на URL-адрес удаленных изображений
    • в обратном вызове сбоя замените src <img> на URL-адрес резервного изображения

К сожалению, сейчас у меня нет времени, чтобы сгенерировать точный код для этого.

0 голосов
/ 26 августа 2011

Вы не можете сделать это с Rails, если не получите изображение на стороне сервера перед рендерингом страницы. Что вы можете сделать, это загрузить его на клиенте с помощью JavaScript, а если возникнут проблемы с его получением, переключитесь на альтернативу.

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