Разница между FileStreamResult и 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);
        }
    }
}

Мой менеджер заметил FileStreamResult во время проверки кода и сказал, что я должен поменять его на:

return new FilePathResult(path, "image/jpeg");

Это имело смысл для меня, поэтому я сделал это. Но через несколько дней один из наших других разработчиков сообщил, что некоторые из изображений, которые я возвращал, возвращались поврежденными. В частности, было много изображений, которые были отрезаны в какой-то момент. Размер изображения был правильным, но нижние 25% - 40% изображения просто пропали.

При просмотре исходного изображения в файловой системе в этом не было ничего плохого. Я поместил изображение в браузер, и оно выглядело нормально. Но мой контроллер возвращал только часть изображения. Хуже того, проблемы были только с некоторыми изображениями ... примерно% 30 из них ... хотя я не могу найти каких-либо особых различий между теми, которые работают, и теми, которые не работают.

При попытке отладки я вернул результат действия обратно в FileStreamResult, и вдруг все снова заработало.

Кто-нибудь знает объяснение этому?

Ответы на вопрос(1)

Ваш ответ на вопрос