文件在stream.CopyTo .netCore2之后被锁定

时间:2018-04-16 12:20:08

标签: c# asp.net-core streaming asp.net-core-2.0

我正在使用JSReport在.netCore2中生成报告;在下面的方法中,视图返回给用户,报告保存在指定的目录中;

            public IActionResult ImageDownload()
                {

                  HttpContext.JsReportFeature().Recipe(Recipe.PhantomPdf)
                      .Configure((r) => r.Template.Phantom = new Phantom
                      {
                          Format = PhantomFormat.A4,
                          Orientation = PhantomOrientation.Portrait                 
                      }).OnAfterRender( (r) =>
                          {
                             var streamIo = r.Content; // streamIo  is of type System.IO
streamIo.CopyTo(System.IO.File.OpenWrite("C:GeneratedReports\\myReport.pdf"));
                             streamIo.Seek(0, SeekOrigin.Begin);                 
                          }
                      );

                  var dp = new Classes.DataProvider();
                  var lstnames = dp.GetRegisteredNames();
                  var lst = lstnames.ToArray<string>();
                  return View("Users", lst);
                }

返回视图后,将打开一个显示pdf报告的新浏览器。同样的pdf也将保存在给定目录的Web服务器中;问题是目录中创建的报告似乎被锁定,我无法复制,打开它...除非我关闭.net解决方案。对这里发生了什么的任何解释?

1 个答案:

答案 0 :(得分:1)

FileStream完成后,您OnAfterRender尚未关闭,这意味着没有其他应用可以打开/访问它。尝试更改代码,在File.OpenWrite调用周围放置一个使用块,以包含using的{​​{1}}语句,例如

FileStream