我正在ASP.NET MVC 2中创建一个简单的控制器操作(在.NET 4.0框架下),它将调整文件大小。
我有一个像这样的控制器(我把它剪了一下):
public ActionResult GetFile(int fileId, string fileSource) {
FileInfo file = repo.FindFileById(fileId);
//do some resizing
string mimeType = string.Empty;
switch(file.Extension) {
case ".jpg":
mimeType = "image/jpg";
break;
//some more stuff
default:
mimeType = "text/png";
break;
}
return File(file.FullName, mimeType);
}
在文件系统上它保存得很好,我可以查看调整大小的文件,但在浏览器中文件不会呈现。
我使用Charles来检查响应,它返回HTTP状态为200,但图像不可见。
如果我尝试保存图像并查看它,Windows图片浏览器会说它已损坏。
我也尝试使用ZIP(没有调整大小;))并返回一个损坏的ZIP文件。
我确定我只是做错了什么但我不能为我的生活发现它。
修改
我已经在Cassini和IIS 7.5(Windows 7)中进行了测试,并在两种情况下都收到了问题。
答案 0 :(得分:1)
我建议你继续淘汰。从一个简单的动作和一个工作的jpeg图像开始:
public ActionResult Index()
{
return File("test.jpg", "image/jpeg");
}
如果这不起作用,那么您可能遇到其他一些问题(您也可能尝试清除浏览器缓存)。如果它有效,则在调整大小之前将test.jpg
替换为您所拥有的那个,直到找到问题为止。
答案 1 :(得分:0)
jpeg的正确mime类型是image / jpeg,而不是image / jpg。这将导致问题。
您还应该发布调整大小代码,因为这可能是您损坏的原因。如果您只是阅读罚款并将其写回来会发生什么?
答案 2 :(得分:0)
事实证明问题是由在网站上运行的Http Compression模块引起的,它试图转换图像响应,破坏图像。
答案 3 :(得分:0)
Try using FileResult instead of ActionResult