2010-08-27 87 views
1

我正在ASP.NET MVC 2(.NET 4.0框架下)创建一个简单的控制器动作,它将调整文件大小。FileResult返回损坏的文件

我有这样的(我剪了下来一点)控制器:

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(sans resizing;)),它会返回一个损坏的ZIP文件。

我确定我只是在做错事,但我不能为我的生活发现它。

编辑

我已经在这两个测试卡西尼和IIS 7.5(Windows 7)中,并在这两种情况下,收到的问题。

+1

我不是说这说明您的问题,但作为一个边评论,不应该默认为“text/html的”? – 2010-08-27 02:59:58

+0

未经测试在黑暗中刺伤,请尝试使用FileResult而不是ActionResult? – ChadT 2010-08-27 04:41:52

+0

你能否提供一个简化版本的图像调整大小的代码,说明问题以及我们可以用来重现此行为的示例图像? – 2010-08-27 06:25:57

回答

1

我会建议你继续消除。先从一个简单的动作和工作JPEG图像:

public ActionResult Index() 
{ 
    return File("test.jpg", "image/jpeg"); 
} 

如果这不起作用,那么你可能有一些其他的问题(你也可以尝试清除浏览器缓存)。如果它正常工作,则用您所拥有的那个替换test.jpg,但在重新调整大小等之前,直到找到问题。

0

jpeg的正确MIME类型是image/jpeg,而不是image/jpg。这会导致问题。

你也应该发布你的大小调整代码,因为这可能是你的腐败的原因。如果您只是读取罚款并将其写回,会发生什么情况?

0

原来问题是由网站上运行的Http压缩模块引起的,它试图转换图像响应,破坏图像。

0

尝试使用替代的ActionResult FileResult

+1

该OP已发布[答](http://stackoverflow.com/a/3593586/3982001),解释什么问题是。 – 2016-10-20 20:50:43