【问题标题】:Serve Image Data Via URL Through Proxy To In Memory Data通过 URL 通过代理向内存数据提供图像数据
【发布时间】:2017-08-01 12:48:58
【问题描述】:

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

问题:

  • 图像来自对仅返回原始图像数据的 API 的调用。
  • 图像数据服务是内部的,不能也不应该直接从外部网络(互联网)访问。
  • 可以使用发送到图像标签<img src="data://image/jpeg;base64,#{base64encodedDataHere}"> 的图像的base64 编码在其他浏览器中呈现数据,但它不会在IE 中呈现,因为数据将始终超过此类标签的32kb 限制。

问题: 在我的 Rails 应用程序中,是否可以设置某种代理,以便我可以构建一个指向我的 Rails 应用程序服务器的 URL 并在图像标签中使用它,例如<img src='http://my-rails-app-server.com/images/123'>,然后点击服务进行检索图像数据,然后以某种方式将其返回给浏览器,这与图像源所期望的一样。

一些伪代码:

class ImageProxy < ApplicationController
  def show
    data = ExternalImageDataRetriever.get_data_from("internal-network-image-service/images/123")
    render something: data
  end
end

【问题讨论】:

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


    【解决方案1】:

    事实证明这非常容易。

    我已经构建了向我的网络内部的外部 API 发出图像请求的工具。调用 API 会返回 2 个重要的东西:原始图像数据和 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) %>
    

    【讨论】:

      猜你喜欢
      • 2016-07-22
      • 2012-07-28
      • 1970-01-01
      • 2016-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多