Stack trace trông giống nhưTại sao tôi nhận được "Không thể truy cập Luồng đã đóng" ở đây?
[ObjectDisposedException: Không thể truy cập một Stream khép kín.]
System.IO .__ Error.StreamIsClosed() 53
System.IO.MemoryStream.Read (Byte [] buffer, Int32 offset, Int32 count) +11411219 System.Web.Mvc.FileStreamResult.WriteFile (Phản hồi HttpResponseBase) +81 System.Web.Mvc.FileResult.ExecuteResult (ControllerContext context) +168
System.Web.Mvc.ControllerActionInvoker. InvokeActionResult (ControllerContext controllerContext, ActionResult actionResult) +13
sau gọi
//Byte[] bytes;
using (var ms = new MemoryStream())
{
using (var doc = new Document())
{
using (var writer = PdfWriter.GetInstance(doc, ms))
{
doc.Open();
//var example_html = @"<p>This <em>is </em><span class=""headline"" style=""text-decoration: underline;"">some</span> <strong>sample <em> text</em></strong><span style=""color: red;"">!!!</span></p>";
var example_html = System.IO.File.ReadAllText(Path.Combine(Server.MapPath("~/EmailTemplates"), "template.html"));
var example_css = @".headline{font-size:200%}";
using (var srHtml = new StringReader(example_html))
{
iTextSharp.tool.xml.XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, srHtml);
}
using (var msCss = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(example_css)))
{
using (var msHtml = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(example_html)))
{
iTextSharp.tool.xml.XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, msHtml, msCss);
}
}
doc.Close();
}
}
//bytes = ms.ToArray();
return File(ms, "application/pdf", "Test.pdf");
}
Tôi đã đọc MemoryStream - Cannot access a closed Stream, nhưng đó không phải là kịch bản giống nhau vì tôi không sử dụng StreamReader
Edit: Vẫn không làm việc với
[OutputCache(NoStore = true, Duration = 0)]
public ActionResult Run()
{
Byte[] bytes;
var ms = new MemoryStream();
try
{
using (var doc = new Document())
{
using (var writer = PdfWriter.GetInstance(doc, ms))
{
writer.CloseStream = false;
doc.Open();
var example_html = @"<p>This <em>is </em><span class=""headline"" style=""text-decoration: underline;"">some</span> <strong>sample <em> text</em></strong><span style=""color: red;"">!!!</span></p>";
//var example_html = System.IO.File.ReadAllText(Path.Combine(Server.MapPath("~/EmailTemplates"), "LinkEmailTemplate.html"));
var example_css = @".headline{font-size:200%}";
using (var msCss = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(example_css)))
{
using (var msHtml = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(example_html)))
{
iTextSharp.tool.xml.XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, msHtml, msCss);
}
}
doc.Close();
}
}
bytes = ms.ToArray();
ms.Position = 0;
return File(ms, "application/pdf", "Test.pdf");
}
catch
{
ms.Dispose();
throw;
}
}
Vì luồng đã bị đóng ngay sau khi bạn thoát khỏi phương thức hành động. Khi khung nhìn cố gắng truy cập nó, nó thấy nó đã bị đóng. –
'Vẫn không hoạt động với' - xác định 'không hoạt động'. Ngoài ra bạn có một biến có tên là 'byte' mà không làm bất cứ điều gì nhưng tôi tò mò nếu có bất cứ điều gì trong mảng này trước khi phương pháp của bạn thoát. – Igor
* Tại sao * bạn sao chép nội dung luồng vào một mảng byte? Nếu bạn làm điều đó không có lý do gì để trả về dòng * với 'File (..)', chỉ trả về mảng byte, ví dụ 'File (bytes ...)' –