且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

关于MVC控制器导出Excel时MemoryStream流已关闭的问题

更新时间:2022-08-21 23:01:20

     在MVC控制器导出Excel时遇到一个问题,当我关闭流时,无法导出Excel文件
代码: MemoryStream ms = bll.GetOrdersExcel(info, ul, filePath,tempPath);
  try
            {
                {
                    if (ms == null)
                    {
                        return Content("导出Excel异常,请联系客服", "text/html");
                    }
                    else
                    {
                        flag = true;
                        ms.Seek(0, SeekOrigin.Begin);
                        return File(ms , "application/ms-excel", fileName);
                    }
                }
            }
            catch (Exception ex)
            {
                LogWrite.Logger("FileExportExcel:" + ex.Message.ToString(), LogEnum.Error);
                return Content("导出Excel异常,请联系客服", "text/html");
            }
            finally
            {
                if (flag)
                {
                    System.IO.File.Delete(System.Web.HttpContext.Current.Server.MapPath(filePath));
                }
                ms.Dispose();
            }
这样写一直报错,因为return 的时候 ms流已经背dispose()了,所以会导致无法找到关闭的流的错误,
找了半天的办法,发现这个问题很简单,只要将ms 用中间量存下来即可,
   byte[] mst = ms.ToArray();//转为byte数组以便于关闭ms
然后将return File(ms , "application/ms-excel", fileName); 改为return File(mst , "application/ms-excel", fileName);就可以了


      如果大家有更好的办法欢迎留言,共同学习!