FileResult返回损坏的文件

时间:2010-08-27 02:49:13

标签: asp.net-mvc asp.net-mvc-2 fileresult

我正在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)中进行了测试,并在两种情况下都收到了问题。

4 个答案:

答案 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