Mam proste kontroler która zwraca zdjęcia:Różnica między FileStreamResult i FilePathResult?
public class ImageController : Controller
{
[AcceptVerbs(HttpVerbs.Get)]
[OutputCache(CacheProfile = "StationeryImageCache")]
public FileResult Show(int customerId, string imageName)
{
try
{
var path = string.Concat(Config.ImageDir, customerId, @"\", imageName);
return new FileStreamResult(new FileStream(path, FileMode.Open), "image/jpeg");
}
catch(System.IO.FileNotFoundException ex)
{
throw new MissingImageException(imageName);
}
}
}
Mój menedżer zauważył FileStreamResult podczas przeglądu kodu i wymienić muszę zamienić go z:
return new FilePathResult(path, "image/jpeg");
to sens dla mnie tak zrobiłem to. Ale po kilku dniach jeden z naszych pozostałych deweloperów zgłosił, że niektóre obrazy, które wracałem, wróciły zepsute. W szczególności było wiele obrazów, które zostały odcięte w pewnym momencie. Rozmiar obrazu był prawidłowy, ale dolne 25% - 40% obrazu zostało po prostu usunięte.
Podczas przeglądania oryginalnego obrazu w systemie plików nie było w tym nic złego. Wrzuciłem obraz do przeglądarki i wszystko wyglądało dobrze. Ale mój kontroler tylko zwrócił część obrazu. Co gorsza, to tylko niektóre obrazy były problemami ... około 30% z nich ... chociaż nie jestem w stanie znaleźć żadnych szczególnych różnic między tymi, którzy pracują, a tymi, którzy tego nie robią.
Podczas próby debugowania odwróciłem wynik działania z powrotem do FileStreamResult i nagle wszystko znów działało.
Czy ktoś zna wyjaśnienie tego?
Nice find! Już miałem zacząć szukać źródła, ale nie zauważyłbym tego nawet, gdybym to zrobił. –