ASP.NET MVC文件下载 - xls / xlsx

时间:2014-09-21 12:39:56

标签: asp.net-mvc excel iis mime-types

应用程序必须允许下载Excel文件。 这些文件存储在服务器的硬盘上,并使用.NET File类返回(这应该处理内容类型标题)。使用xlsx它工作正常。在客户端使用xls,我得到类型" application / octet-stream"的响应,这会导致excel文件损坏。

我在dev机器上尝试了相同的场景,它运行正常(本地IIS返回正确的" application / vnd.ms-excel")。我在生产中做了一些日志记录,正确识别了MIME类型,因此返回 this.File(Path.Combine(pathDir,fileName),contentType,fileName); 部分是正确的。

因为它适用于我的开发机器,我认为这是一个IIS问题。 xls和xlsx文件的MIME类型设置在我的开发和服务器计算机上看起来相同。

返回文件的代码:

    // just some helper maching extension to MIME Type
    var contentType = IdentityFileType.GetFileType(fileName); 
    if (!string.IsNullOrEmpty(contentType))
    {
        var pathDir = Path.Combine(
            ConfigurationManager.AppSettings["ContentDir"], ConfigurationManager.AppSettings["FileDirRel"]);

        if (System.IO.File.Exists(Path.Combine(pathDir, fileName)))
        {
            // on log the contentType is "application/vnd.ms-excel", fileName "somefile.xls"
            return this.File(Path.Combine(pathDir, fileName), contentType, fileName);
        }
    }
    // else restore state and inform user

为什么它会覆盖正确设置的内容类型并返回默认的八位字节流?

1 个答案:

答案 0 :(得分:1)

尝试修改您的服务器网络配置

<system.webServer>
  <staticContent>
    <remove fileExtension="xls"/>
    <mimeMap fileExtension="xls" mimeType="application/vnd.ms-excel"/>
  </staticContent>
</system.webServer>