如何检查网站上是否找到图像?

时间:2011-08-26 14:11:18

标签: ruby-on-rails ruby ruby-on-rails-3 image web

我正在使用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请求以及如何处理以上情况?

2 个答案:

答案 0 :(得分:6)

以下是如何实现原始问题中的想法。

此方法的问题在于,您的响应时间将包括其他域响应您的图像请求所需的时间。如果该网站有  问题,然后你的页面不会加载,直到请求超时。

<%
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调用
    • 在成功回调中用远程图像的url替换<img>的src
    • 错误回调中的
    • 用后备图片的网址替换<img>的src

不幸的是,我现在没有时间为此生成确切的代码。

答案 1 :(得分:-1)

除非在呈现页面之前获取图像服务器端,否则无法使用Rails执行此操作。您可以做的是使用JavaScript在客户端中获取它,如果在检索它时遇到问题,那么请切换到替代方案。