NPOI生产.xlsx文件件时,在使用book.Write(ms);后,会关闭流,这样导致再次使用Respons输出流的时候就出错了。
造成关闭流的主要原因有时其实是跨域,同域是没有问题的。
//新建类 重写Npoi流方法 public class NpoiMemoryStream : MemoryStream { public NpoiMemoryStream() { AllowClose = true; } public bool AllowClose { get; set; } public override void Close() { if (AllowClose) base.Close(); } } //导出Excel文件的方法 var ms = new NpoiMemoryStream(); ms.AllowClose = false; workbook.Write(ms); ms.Flush(); ms.Seek(0, SeekOrigin.Begin); ms.AllowClose = true; HttpContext curContext = HttpContext.Current; curContext.Response.ContentType = "application/vnd.ms-excel"; curContext.Response.ContentEncoding = Encoding.UTF8; curContext.Response.Charset = ""; curContext.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName, Encoding.UTF8)); long fileSize = ms.Length; curContext.Response.AddHeader("Content-Length", fileSize.ToString()); curContext.Response.BinaryWrite(ms.GetBuffer()); curContext.Response.End();
原文:https://blog.csdn.net/eit520/article/details/53231642