2011-09-23 22 views
1

我有一个Rails 3应用程序,我试图显示带有用户及其各自Skype状态的页面。如果页面是HTTP,这很容易实现:只需将元素的背景url设置为从http://mystatus.skype.com/mediumicon/USERNAME返回的图像即可。从HTTPS站点获取Skype状态图像

但是,我的网站是HTTPS,并且通过HTTP从HTTPS加载资源导致IE窒息。而Skype显然不提供状态图标的HTTPS版本。

因此,我正在通过调用Net :: HTTP调用上述URL来获取Skype状态服务器端(即在控制器中)的方法。然后,我可以使用send_data()将JUST图像字节写回页面,而没有任何问题。但我无法弄清楚如何将图像字节与所有其他页面数据一起传回视图。

任何想法?

回答

3

这是一个可用的代码片段。我在sinatra中完成它纯粹是为了让它独立运行,但get块的内容是重要的线。

require 'sinatra' 
require 'net/http' 
require 'base64' 

get '/' do 
    base_image = Net::HTTP.get(URI.parse('http://mystatus.skype.com/mediumicon/Gazler')) 
    "<img src=\"data:image/png;base64,#{Base64.encode64(base_image)}\">" 
end 

这利用了base64编码源。你可以阅读更多here

请注意,这可能不适用于旧版本的IE。

对此的一个解决方案是对上面返回的图像进行base64编码,并将所有可能的图像存储为状态,然后从结果中进行比较。很显然,每次都会很慢,所以你会想在本地存储图像的base64,然后在base64字符串上查找。

希望这是有道理的。

编辑

作为一个辅助方法:

def skype_status(username) 
    base_image = Net::HTTP.get(URI.parse("http://mystatus.skype.com/mediumicon/#{username}")) 
    content_tag("img", :src =>"data:image/png;base64,#{Base64.encode64(base_image)}") 
end 
+0

完美!现在,我只需要将该块的内容放入帮助程序中,然后设置好。已添加 – yalestar

+0

(未经测试)辅助方法。希望这可以帮助。 – Gazler

+0

双人真棒。谢谢! – yalestar