天天看點

關于MVC控制器導出Excel時MemoryStream流已關閉的問題

     在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);就可以了

      如果大家有更好的辦法歡迎留言,共同學習!