Si l'image n'est pas si grande, et s'il y a de bonnes chances que vous la réutilisiez souvent, et si vous n'en avez pas trop, et si les images ne sont pas secrètes (ce qui signifie que ce n'est pas grand traiter si un utilisateur pouvait potentiellement voir l'image d'une autre personne) ...
Il y a beaucoup de "si" ici, donc il y a de fortes chances que ce soit une mauvaise idée:
Vous pouvez stocker les octets d'image Cache
pendant une courte période et faire pointer une balise d'image vers une méthode d'action, qui à son tour lit dans le cache et crache votre image. Cela permettra au navigateur de mettre en cache l'image de manière appropriée.
// In your original controller action
HttpContext.Cache.Add("image-" + model.Id, model.ImageBytes, null,
Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(1),
CacheItemPriority.Normal, null);
// In your view:
<img src="@Url.Action("GetImage", "MyControllerName", new{fooId = Model.Id})">
// In your controller:
[OutputCache(VaryByParam = "fooId", Duration = 60)]
public ActionResult GetImage(int fooId) {
// Make sure you check for null as appropriate, re-pull from DB, etc.
return File((byte[])HttpContext.Cache["image-" + fooId], "image/gif");
}
Cela a l'avantage supplémentaire (ou est-ce une béquille?) De travailler dans des navigateurs plus anciens, où les images en ligne ne fonctionnent pas dans IE7 (ou IE8 si elles sont supérieures à 32 Ko).