生成图像并在html页面中显示它而不将其写在磁盘上

时间:2010-09-30 10:51:32

标签: jquery ruby-on-rails ajax web-applications

在我的Ruby On Rails项目中(但这并不重要), 当我加载一个html页面时,我需要解密一个图像(jpg)并在网页中显示它: 在页面请求之后,图像被解密,文件在服务器磁盘上写入,因此浏览器可以显示图像。

我不想在服务器上写图像,但我希望动态加密图像

我认为ajax(jquery)可能会有所帮助,但我不知道如何动态使用它(没有在磁盘上写入图像)。

你有什么想法吗?

谢谢你, 的Alessandro

2 个答案:

答案 0 :(得分:2)

执行此操作的唯一方法是data URI scheme.

它允许您直接将图像数据嵌入src元素的<img>属性。

然而,它有其局限性:它在IE中根本不起作用&lt; 8,IE 8中的大小限制为32k。

答案 1 :(得分:2)

您可以使用send_data代替呈现网页。看看here。通过这种方式,您可以生成文件并将其发送而无需保存到磁盘。但是,不会呈现正常页面。但你可以像这样使用它:

1.创建正常的html视图,例如索引操作:

# controller
def index
  @some_resources = SomeResources.all # just whatever you need
end

# somewhere in index.html.erb view
<img src="rendered_images/my_rendered_image.jpg" />

2.添加rendered_images

的路线
# routes
match "rendered_images/:filename" => "application#render_image"

3.在应用程序控制器中添加渲染图像动作

# application controller
def render_image
  send_data my_function_to_generate_file, :filename => params[:filename], :type => 'image/jpeg', :disposition => :inline
end

我还没有测试过。我希望它会给你一些开始的东西!