Wenn das Bild nicht so groß ist und eine gute Chance besteht, werden Sie das Bild häufig wiederverwenden, wenn Sie nicht zu viele davon haben und wenn die Bilder nicht geheim sind (was bedeutet, dass es nicht groß ist) Deal, wenn ein Benutzer möglicherweise das Bild einer anderen Person sehen könnte) ...
Viele "Wenn" sind hier, also besteht eine gute Chance, dass dies eine schlechte Idee ist:
Sie können die Bildbytes Cache
für kurze Zeit speichern und ein Bild-Tag erstellen, das auf eine Aktionsmethode verweist, die wiederum aus dem Cache liest und Ihr Bild ausspuckt. Dadurch kann der Browser das Bild entsprechend zwischenspeichern.
// 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");
}
Dies hat den zusätzlichen Vorteil (oder ist es eine Krücke?), In älteren Browsern zu arbeiten, in denen die Inline-Bilder in IE7 (oder IE8, wenn sie größer als 32 KB sind) nicht funktionieren.