通过代理服务器在内存数据中通过URL提供图像数据

时间:2017-03-11 03:01:34

标签: html ruby-on-rails image http proxy

目标:从IE11和Edge中的原始数据渲染图像。

问题:

  • 图像来自对仅返回原始图像数据的API的调用。
  • 图像数据服务是内部的,不能也不应该直接从外部网络(互联网)访问。
  • 可以使用发送到图像标记<img src='http://my-rails-app-server.com/images/123'>的图像的base64编码在其他浏览器中呈现数据,但它不会在IE中呈现,因为此类型的数据总是超过32kb的限制标签

问题: 在我的Rails应用程序中,是否可以设置某种代理,以便我可以构建一个到我的Rails应用服务器的URL并在图像标记中使用它,例如class ImageProxy < ApplicationController def show data = ExternalImageDataRetriever.get_data_from("internal-network-image-service/images/123") render something: data end end ,然后它将命中服务检索图像数据,然后以某种方式将其返回到浏览器。

一些伪代码:

{{1}}

1 个答案:

答案 0 :(得分:0)

事实证明这非常容易。

我已经构建了一个工具,用于向网络中的外部API发出请求以获取图像。调用API会返回两件重要的事情:原始图像数据和mime类型。

我所要做的只是通过铁轨传递这些。

控制器动作最终看起来像这样

class ImageProxy < ApplicationController
  def show
    service_response = ExternalImageDataRetriever.get_data_from("internal-network-image-service/images/123")
    render text: service_response.data, layout: nil, content_type: service_response.mime_type
  end
end

之后,它只是在视图中的图像标记中使用该控制器操作的路径。

<%= image_tag image_proxy_path(id: 123) %>