Jeśli obraz nie jest tak duży i istnieje duża szansa, że będziesz go często używać ponownie i jeśli nie masz ich zbyt wiele i jeśli obrazy nie są tajne (co oznacza, że nie są duże transakcję, gdyby jeden użytkownik mógł potencjalnie zobaczyć obraz innej osoby) ...
Jest tu dużo „jeśli”, więc istnieje duża szansa, że to zły pomysł:
Możesz przechowywać bajty obrazu Cache
przez krótki czas i utworzyć tag obrazu wskazujący na metodę akcji, która z kolei odczytuje z pamięci podręcznej i wypluwa obraz. Umożliwi to przeglądarce odpowiednie buforowanie obrazu.
// 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");
}
Ma to dodatkową zaletę (a może jest to kula?) W przypadku pracy w starszych przeglądarkach, w których obrazy wbudowane nie działają w IE7 (lub IE8, jeśli są większe niż 32 kB).