【问题标题】:FileResult returning corrupt fileFileResult 返回损坏的文件
【发布时间】:2010-08-27 02:49:13
【问题描述】:

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

【问题讨论】:

  • 我并不是说这可以解释您的问题,但作为旁注,您的默认值不应该是“text/html”吗?
  • 未经测试的暗中刺伤,尝试使用 FileResult 而不是 ActionResult?
  • 您能否提供一个简化版本的图像大小调整代码来说明问题以及我们可以用来重现此行为的示例图像?
  • @Darin Dimitrov - 我 100% 确定这不是调整大小的代码。如前所述,我测试了发送 ZIP(使用正确的 ZIP mime 类型)并且发生了同样的问题

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        尝试使用 FileResult 而不是 ActionResult

        【讨论】:

        • OP 已经发了answer,说明问题出在哪里。
        猜你喜欢
        • 1970-01-01
        • 2017-05-22
        • 1970-01-01
        • 1970-01-01
        • 2021-05-11
        • 2020-06-23
        • 1970-01-01
        • 1970-01-01
        • 2020-10-15
        相关资源
        最近更新 更多