我有一个Web应用程序,用户可以在其中配置报告(ASP.NET MVC,无Reporting Services或任何其他内容)。然后将配置表示为JavaScript对象,该对象作为JSON发送到服务器以检索数据并实际生成报告。提交HTML看起来类似于:
<form method="post" action="/RenderReport" target="_blank">
<input type="hidden" name="reportJson"/>
</form>
这非常适合在新的浏览器窗口中打开报表。但是,在本报告中,我想要包含从数据中生成的图像。怎么能以一种好的方式做到这一点?想到的明显方法是:
<img src="/GenerateImage/?metadata1=2&metadata2=4"/>
。但是,这不起作用,因为元数据很可能使URL超过IE中的最大2083个字符。<img src="data:image/png;base64,{data_in_json_response}"/>
这样的图像元素。但这是不可能的,因为我的应用程序必须在IE6中工作,IE6不支持数据URI。生成报告时生成图像,为每个图像创建唯一键,然后使用<img src="/GetCachedImage?id=23497abc289"/>
形式的URL。这是我目前最好的想法,但它确实提出了缓存图像的位置问题。我能想到的地方是:
它还提出了何时删除缓存项的问题。如果我在显示图像后立即删除它们,似乎在没有图像变为红色xes的情况下无法刷新或打印页面。每个其他选项都意味着额外的复杂性。
如何以一种好的方式解决这个问题,或者至少一个不错的问题?
答案 0 :(得分:0)
您可以轻松地对图像进行旋转磁盘缓存... Google“ASP.NET图像大小调整模块”,源代码包括一个可配置大小的磁盘缓存模块。
然而,
如果报告是HTML,并且包含图像引用,则无法知道该报告将会持续多长时间。这些图像可能永远需要...说某人复制并粘贴到电子邮件中......这些链接会粘在一起,并在清除缓存时突然中断。
答案 1 :(得分:0)
如果您只有一台服务器,则可以使用混合方法。创建一个缓存图像的字典,其中“string”是您示例中的ID值。 object是您创建图像所需的参数集合。然后你可以只为myrserver / generate / image / 123456发出请求并返回相应的类型。
除非您有某种方式来共享代表您的参数的“对象”,否则这在服务器场中不起作用。你仍然需要以某种方式清理这本字典,否则就会冒险不受限制地增长。