我有一個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