我有一个Web应用程序,用户可以在其中配置报告(ASP.NET MVC,无Reporting Services或任何其他)。然后该配置被表示为以JSON形式发送到服务器的JavaScript对象,以检索数据并实际生成报告。提交HTML外观与此类似:在网页中包含动态图像
<form method="post" action="/RenderReport" target="_blank">
<input type="hidden" name="reportJson"/>
</form>
这很适合在新的浏览器窗口中打开报告。但是,在本报告中,我想包含从数据中生成的图像。这怎么能以好的方式完成?想到的显而易见的方式是:
- 嵌入在URL中生成图像所需的元数据,如
<img src="/GenerateImage/?metadata1=2&metadata2=4"/>
。然而,这不起作用,因为元数据很可能使URL在IE中超过2083个字符。 - 使用ajax POST请求,然后当响应返回时,创建一个图像元素,如
<img src="data:image/png;base64,{data_in_json_response}"/>
。但这是不可能的,因为我的应用程序必须在不支持数据URI的IE6中工作。 生成图像,同时生成报告,为每个图像创建一个唯一键,然后使用
<img src="/GetCachedImage?id=23497abc289"/>
格式的URL。这是我目前最好的想法,但确实会引发图像缓存的问题。我能想到的地方是:- 在会话中。优点:当会话被放弃时,缓存的项目会自动删除。缺点:访问会话会在一个会话中序列化对页面的访问。对我而言这很糟糕。
- 在数据库中:优点:运作良好。缺点:不必要的开销,缓存的项目必须删除一段时间。
- 在Application/Cache对象中。我没有真正考虑过这个的所有优点和缺点。
它也引发了何时删除缓存项目的问题。如果在图像显示后立即将其删除,看起来页面无法刷新或打印,图像不会变为红色。其他选项意味着额外的复杂性。
这个问题怎么解决好,或者至少有一个不坏?
我宁可不写文件,因为这会导致更多的维护问题(这将是写入文件的应用程序中的唯一位置)。 关于图像需要永久保留的好处,我想我必须通过返回一个图像说“抱歉,不起作用”而不是在提供错误密钥时返回500错误来解决此问题。 – erikkallen 2010-01-04 23:00:50