通过 URL 通过代理向内存数据提供图像数据
Posted
技术标签:
【中文标题】通过 URL 通过代理向内存数据提供图像数据【英文标题】:Serve Image Data Via URL Through Proxy To In Memory Data 【发布时间】: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
【问题讨论】:
【参考方案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) %>
【讨论】:
以上是关于通过 URL 通过代理向内存数据提供图像数据的主要内容,如果未能解决你的问题,请参考以下文章