代码之家  ›  专栏  ›  技术社区  ›  erikkallen

在网页中包含动态图像

  •  0
  • erikkallen  · 技术社区  · 15 年前

    我有一个web应用程序,用户可以在其中配置报告(ASP.NETMVC,没有报告服务或任何东西)。然后将配置表示为一个JavaScript对象,该对象作为JSON发送到服务器,以检索数据并实际生成报告。提交HTML类似于:

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

    这对于在新的浏览器窗口中打开报表非常有效。但是,在这个报告中,我想包括从数据生成的图像。如何才能以一种好的方式做到这一点?我想到的显而易见的方法是:

    1. 在URL中嵌入生成图像所需的元数据,如 <img src="/GenerateImage/?metadata1=2&metadata2=4"/>
    2. 使用ajax POST请求,然后当响应返回时,创建一个图像元素,如 <img src="data:image/png;base64,{data_in_json_response}"/> . 但这是不可能的,因为我的应用程序必须在IE6中工作,IE6不支持数据URI。
    3. 生成报表时生成图像,为每个图像创建唯一的键,然后使用表单的URL <img src="/GetCachedImage?id=23497abc289"/>

      • 在会议中。优点:当会话被放弃时,缓存项会自动删除。缺点:访问会话将序列化对会话中页面的访问。这对我来说很糟糕。
      • 在应用程序/缓存对象中。我还没有真正考虑过这一条的所有优点和缺点。

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

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

    2 回复  |  直到 15 年前
        1
  •  0
  •   Lilith River    15 年前

    你可以做一个旋转磁盘缓存的图像相当容易。。。“谷歌”ASP.NET图片大小调整模块”,源代码包括一个可配置大小的磁盘缓存模块。

    然而,

    如果报表是HTML,并且包含图像引用,则无法知道该报表将保留多长时间。那些图像可能永远需要。。。假设有人复制并粘贴到电子邮件中。。。这些链接将继续存在,并在清除缓存时突然中断。

        2
  •  0
  •   No Refunds No Returns    15 年前

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

    这在服务器场中不起作用,除非您有某种方法共享表示参数的“对象”。你还是得把这本词典整理一下,否则就得冒着它不受约束的危险。