1

我正在 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

4 回答 4

1

我建议您通过消除来进行。从一个简单的动作和一个工作的 jpeg 图像开始:

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

如果这不起作用,那么您可能遇到了其他问题(您也可以尝试清除浏览器缓存)。如果它有效,请test.jpg用您拥有但在调整大小等之前拥有的替换,直到您发现问题。

于 2010-08-28T09:54:35.080 回答
0

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

您还应该发布调整大小的代码,因为这可能是您损坏的原因。如果您只是阅读罚款并将其写回会发生什么?

于 2010-08-28T13:42:55.020 回答
0

事实证明,问题是由站点上运行的 Http 压缩模块引起的,它试图转换图像响应,破坏图像。

于 2010-08-29T05:01:43.377 回答
0

尝试使用 FileResult 而不是 ActionResult

于 2016-10-20T20:06:52.440 回答