En utilisant la version release de MVC, voici ce que je fais :
[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");
}
Il y a évidemment des éléments spécifiques à l'application concernant la construction du chemin, mais le retour du FileStreamResult est simple et agréable.
J'ai effectué quelques tests de performance concernant cette action par rapport à votre appel quotidien à l'image (en contournant le contrôleur) et la différence entre les moyennes n'était que de 3 millisecondes environ (la moyenne du contrôleur était de 68 ms, celle du non-contrôleur de 65 ms).
J'ai essayé certaines des autres méthodes mentionnées dans les réponses ici et les performances ont été beaucoup plus dramatiques ... plusieurs des réponses des solutions ont été jusqu'à 6x le non-contrôleur (autres contrôleurs avg 340ms, non-contrôleur 65ms).
1 votes
J'ai posé une question similaire ici https://stackoverflow.com/questions/155906/creating-a-private-photo-gallery-using-aspnet-mvc et j'ai fini par trouver un excellent guide pour faire cela. J'ai créé une classe ImageResult en suivant ce guide. https://blog.maartenballiauw.be/post/2008/05/13/aspnet-mvc-custom-actionresult.html
2 votes
Si vous voulez modifier l'image, utiliser le module HttpModule ImageResizing.Net pour obtenir les meilleures performances. Dans le cas contraire, un FilePathResult n'ajoute que quelques pour cent de surcharge. La réécriture d'URL en ajoute un peu moins.
1 votes
Pourquoi ne pas utiliser le contrôleur WebApi au lieu de MVC ?
ApiController class