Npoi Web 項目中(XSSFWorkbook) 導出出現沒法訪問已關閉的流

NPOI生產.xlsx文件件時,在使用book.Write(ms);後,會關閉流,這樣致使再次使用Respons輸出流的時候就出錯了。跨域

形成關閉流的主要緣由有時實際上是跨域,同域是沒有問題的。app

//新建類 重寫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 ide

相關文章
相關標籤/搜索