2011-08-26 61 views
7

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

回答

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调用远程图像
    • 更换<img>的src与远程图片的网址
    • 在失败回调中替换<img>的src与回退图片的网址

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

+0

”不幸的是,我现在没有时间为此生成确切的代码。“ :' - (...我会试试我的自我... – Backo

+0

为什么你在这里使用'to_f'?可能状态码是一个float而不是int吗? – new2cpp

+0

@ new2cpp不知道为什么我使用'to_f',编辑响应 –

-1

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

+0

如何在使用JavaScript呈现页面(我正在使用jQuery 1.6)之前获取图像服务器端? – Backo

+0

你在这两方面都有选择,但[curb](http://curb.rubyforge.org/)宝石可能是最好的选择。也可以使用JavaScript下载服务器端*或客户端,而不是两者。只是有人必须验证链接是否有效,您只需挑选谁。如果你在做这个服务器端,你可能想把它作为填充映射表的后台进程来运行。 – tadman

+0

为什么你建议我使用'curb'gem而不是Ruby标准库? – Backo