stream.CopyTo .netCore2 后文件锁定
File locked after stream.CopyTo .netCore2
我正在使用 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 将保存在给定目录的网络服务器中;问题是目录中创建的报告似乎被锁定,我无法复制它,打开它...除非我关闭 .net 解决方案。对这里发生的事情有任何解释吗?
当 OnAfterRender
完成后,您 FileStream
并未关闭,这意味着没有其他应用可以 open/access 它。尝试更改代码,在 File.OpenWrite
调用周围放置一个 using 块,以包含 FileStream
的 using
语句,例如
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
using(var fs = System.IO.File.OpenWrite("C:GeneratedReports\myReport.pdf"))
{
streamIo.CopyTo(fs);
}
streamIo.Seek(0, SeekOrigin.Begin);
}
);
var dp = new Classes.DataProvider();
var lstnames = dp.GetRegisteredNames();
var lst = lstnames.ToArray<string>();
return View("Users", lst);
}
我正在使用 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 将保存在给定目录的网络服务器中;问题是目录中创建的报告似乎被锁定,我无法复制它,打开它...除非我关闭 .net 解决方案。对这里发生的事情有任何解释吗?
当 OnAfterRender
完成后,您 FileStream
并未关闭,这意味着没有其他应用可以 open/access 它。尝试更改代码,在 File.OpenWrite
调用周围放置一个 using 块,以包含 FileStream
的 using
语句,例如
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
using(var fs = System.IO.File.OpenWrite("C:GeneratedReports\myReport.pdf"))
{
streamIo.CopyTo(fs);
}
streamIo.Seek(0, SeekOrigin.Begin);
}
);
var dp = new Classes.DataProvider();
var lstnames = dp.GetRegisteredNames();
var lst = lstnames.ToArray<string>();
return View("Users", lst);
}