在网页中包含动态图像

时间:2010-01-04 22:47:35

标签: asp.net-mvc

我有一个Web应用程序,用户可以在其中配置报告(ASP.NET MVC,无Reporting Services或任何其他内容)。然后将配置表示为JavaScript对象,该对象作为JSON发送到服务器以检索数据并实际生成报告。提交HTML看起来类似于:

<form method="post" action="/RenderReport" target="_blank">
    <input type="hidden" name="reportJson"/>
</form>

这非常适合在新的浏览器窗口中打开报表。但是,在本报告中,我想要包含从数据中生成的图像。怎么能以一种好的方式做到这一点?想到的明显方法是:

  1. 嵌入在网址中生成图片所需的元数据,例如<img src="/GenerateImage/?metadata1=2&metadata2=4"/>。但是,这不起作用,因为元数据很可能使URL超过IE中的最大2083个字符。
  2. 使用ajax POST请求,然后当响应返回时,创建一个像<img src="data:image/png;base64,{data_in_json_response}"/>这样的图像元素。但这是不可能的,因为我的应用程序必须在IE6中工作,IE6不支持数据URI。
  3. 生成报告时生成图像,为每个图像创建唯一键,然后使用<img src="/GetCachedImage?id=23497abc289"/>形式的URL。这是我目前最好的想法,但它确实提出了缓存图像的位置问题。我能想到的地方是:

    • 在会议中。优点:当会话被放弃时,会自动删除缓存的项目。缺点:访问会话将序列化对会话内页面的访问。这在我的情况下很糟糕。
    • 在数据库中:优势:效果很好。缺点:不必要的开销,必须删除缓存的项目。
    • 在Application / Cache对象中。我并没有真正考虑过这一点的所有优点和缺点。

    它还提出了何时删除缓存项的问题。如果我在显示图像后立即删除它们,似乎在没有图像变为红色xes的情况下无法刷新或打印页面。每个其他选项都意味着额外的复杂性。

  4. 如何以一种好的方式解决这个问题,或者至少一个不错的问题?

2 个答案:

答案 0 :(得分:0)

您可以轻松地对图像进行旋转磁盘缓存... Google“ASP.NET图像大小调整模块”,源代码包括一个可配置大小的磁盘缓存模块。

然而,

如果报告是HTML,并且包含图像引用,则无法知道该报告将会持续多长时间。这些图像可能永远需要...说某人复制并粘贴到电子邮件中......这些链接会粘在一起,并在清除缓存时突然中断。

答案 1 :(得分:0)

如果您只有一台服务器,则可以使用混合方法。创建一个缓存图像的字典,其中“string”是您示例中的ID值。 object是您创建图像所需的参数集合。然后你可以只为myrserver / generate / image / 123456发出请求并返回相应的类型。

除非您有某种方式来共享代表您的参数的“对象”,否则这在服务器场中不起作用。你仍然需要以某种方式清理这本字典,否则就会冒险不受限制地增长。