应用程序必须允许下载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
为什么它会覆盖正确设置的内容类型并返回默认的八位字节流?
答案 0 :(得分:1)
尝试修改您的服务器网络配置
<system.webServer>
<staticContent>
<remove fileExtension="xls"/>
<mimeMap fileExtension="xls" mimeType="application/vnd.ms-excel"/>
</staticContent>
</system.webServer>