我使用OpenXML库生成并使用excel文件并将其发送给用户。 它适用于Chrome和IE,但是当我尝试使用Firefox时,我遇到了一个问题。
使用FF保存文件时,我得到一个没有扩展名的文件 使用FF打开文件时,它就像一个魅力:(
我正在使用以下函数将流发送给用户。
public static void SendToClient(Byte[] stream, string fileName)
{
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
HttpContext.Current.Response.BinaryWrite(stream);
HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=" + fileName + ".xlsx");
HttpContext.Current.Response.AddHeader("content-length", stream.LongLength.ToString());
HttpContext.Current.Response.End();
}
并将其称为:
_ExcelReports.SendToClient(excelUtil.ExportToExcel(excelWorkBook), projectName + " Resources");
甚至更奇怪,FF下载对话框识别文件,如截图:
现在完成下载:
答案 0 :(得分:2)
您是否尝试过使用contentType = "application/vnd.ms-excel"
?
我是一个有更大问题的新手,弄清楚我正在尝试做什么,但我工作的一点点就是使用那种内容类型。
答案 1 :(得分:1)
该代码示例适合我。所以现在是一些随机调试建议的时候了。
1)尝试清除Firefox的历史记录/ cookie /内容缓存。然后再次运行它。缓存可能会影响响应。
2)SendToClient()函数是最后一个要运行的函数吗?因为如果之后还有其他事情(因为它包含Response.End()函数),可能会发生一些奇怪的事情或破坏响应流。
3)尝试注释代码行以设置ContentEncoding,以及用于添加内容长度的代码行。事实上,尝试使用SendToClient()(对我来说最简单的):
HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
HttpContext.Current.Response.BinaryWrite(stream);
HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=" + fileName + ".xlsx");
HttpContext.Current.Response.End();
基本上,它是测试仍然适用于IE和Chrome的最小代码行但是FF失败。
4)尝试“内联”而不是content-disposition的“附件”,看看它是否有效。
当然,我假设OpenXML文件本身是有效的。当您打开下载的文件时(无论是使用IE还是Chrome),Excel是否会抱怨(比如要求修复文件或其他内容)?