У меня есть веб-приложение, в котором пользователь может настраивать отчеты (ASP.NET MVC, без служб Reporting Services или чего-либо еще). Конфигурация затем представляется в виде объекта JavaScript, который отправляется на сервер в виде JSON для получения данных и создания отчета. 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}"/>
. Однако это невозможно, поскольку мое приложение должно работать в IE6, который не поддерживает URI данных.
Создание изображений при создании отчета, создание уникального ключа для каждого изображения, а затем использование URL-адресов в форме <img src="/GetCachedImage?id=23497abc289"/>
. Это моя лучшая идея, но она ставит вопрос о том, где кэшировать изображения. Я могу думать о следующих местах:
- На сессии. Преимущество: кэшированный элемент автоматически удаляется, когда сеанс прекращается. Недостаток: доступ к сеансу сериализует доступ к странице в течение сеанса. Это плохо в моем случае.
- В базе данных: Преимущество: хорошо работает. Недостаток: ненужные накладные расходы, кэшированные элементы должны быть удалены некоторое время.
- В объекте Application / Cache. Я действительно не продумал все преимущества и недостатки этого.
Также возникает вопрос о том, когда удалять кэшированные элементы. Если я удаляю их сразу после показа изображения, кажется, что страница не может быть обновлена или напечатана, если изображения не станут красными. Любой другой вариант означает дополнительную сложность.
Как можно решить эту проблему хорошим способом или хотя бы одной, не плохой?