我有一个返回图像的简单控制器:
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,突然一切都恢复了。
有谁知道对此的解释?