我有一个简单的控制器可以返回图像:
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,突然一切都恢复了。
有人知道对此的解释吗?
答案 0 :(得分:13)
在FilePathResult中使用的HttpResponse.TransmitFile似乎有或有一些问题。它可能取决于您根据此hotfix运行服务器的Windows版本。如果您在Google上搜索“response.TransmitFile error”之类的内容,则会出现很多错误。
我猜您应该使用原始代码!