我有一个ASP.NET页面和一个c#方法,它接受一个内存流(excel文件),然后使用HTTPResponse-class将这个文件以二进制形式传输到浏览器。
public static void WriteStreamToBrowser(MemoryStream streamExcelFile, string filename, bool isResponseEnd = false)
{
System.Web.HttpResponse Response = System.Web.HttpContext.Current.Response;
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", filename));
Response.Clear();
Response.BinaryWrite(streamExcelFile.GetBuffer());
}
现在,当我在Firefox或Chrome中使用我的asp.net页面时,此方法可以正常工作。他们整齐地触发网站“你想下载这个文件”功能。
然而,当使用IE11时,浏览器窗口会立即关闭,但“您要下载此文件吗?”对话框实际上弹出并保持不变。
我猜测IE在响应方法方面需要一些特殊处理,但我无法弄清楚我做错了什么。
如何更改上述方法,以便与IE11一起使用?
-
如果您需要任何额外的细节,请告诉我们!
编辑:
值得一提的是,调试不会抛出任何异常。
此外,弹出的对话框实际上是下载历史记录。
编辑2:
我试图遵循其他指南中的一些建议,并添加了一些内容。结果仍然是一样的。
public static void WriteStreamToBrowser2(MemoryStream streamExcelFile, string filename, bool isUseNewExcel = true)
{
System.Web.HttpResponse Response = System.Web.HttpContext.Current.Response;
string contentType = isUseNewExcel ? "application/vnd.ms-excel" : "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", filename));
Response.AddHeader("content-length", streamExcelFile.Length.ToString());
Response.AddHeader("content-type", contentType);
Response.BinaryWrite(streamExcelFile.GetBuffer());
//to avoid ThreadAbortion
Response.Flush();
Response.SuppressContent = true;
HttpContext.Current.ApplicationInstance.CompleteRequest();
Response.Close();
}
答案 0 :(得分:0)
好吧,我设法通过在文件名中添加+“。xls”来解决损坏的Excel下载问题。为什么IE而不是Chrome和Firefox要求你在filenamestring中明确定义扩展名,我永远不会知道。要清楚,这并没有解决我关闭我的主窗口的问题,但现在不是问题。