Mit der Release-Version von MVC, hier ist, was ich tun:
[AcceptVerbs(HttpVerbs.Get)]
[OutputCache(CacheProfile = "CustomerImages")]
public FileResult Show(int customerId, string imageName)
{
var path = string.Concat(ConfigData.ImagesDirectory, customerId, "\\", imageName);
return new FileStreamResult(new FileStream(path, FileMode.Open), "image/jpeg");
}
Offensichtlich habe ich hier einige anwendungsspezifische Dinge in Bezug auf die Pfadkonstruktion, aber die Rückgabe des FileStreamResult ist schön und einfach.
Ich habe einige Performance-Tests in Bezug auf diese Aktion gegen Ihre täglichen Aufruf des Bildes (unter Umgehung der Controller) und der Unterschied zwischen den Durchschnittswerten war nur etwa 3 Millisekunden (Controller avg war 68ms, nicht-Controller war 65ms).
Ich hatte einige der anderen Methoden ausprobiert, die in den Antworten hier erwähnt wurden, und die Leistungseinbußen waren viel dramatischer... mehrere der Lösungen reagierten bis zu 6 Mal schneller als die Nicht-Controller (andere Controller avg 340ms, Nicht-Controller 65ms).
1 Stimmen
Ich habe eine ähnliche Frage hier gestellt https://stackoverflow.com/questions/155906/creating-a-private-photo-gallery-using-aspnet-mvc und fand schließlich einen tollen Leitfaden für diese Aufgabe. Ich habe eine ImageResult-Klasse nach diesem Leitfaden erstellt. https://blog.maartenballiauw.be/post/2008/05/13/aspnet-mvc-custom-actionresult.html
2 Stimmen
Wenn Sie das Bild verändern wollen, das ImageResizing.Net HttpModul verwenden um die beste Leistung zu erzielen. Wenn Sie das nicht tun, fügt ein FilePathResult nur ein paar Prozent des Overheads hinzu. URL-Rewriting fügt etwas weniger hinzu.
1 Stimmen
Warum nicht mit WebApi Controller statt MVC?
ApiController class