我正在尝试在页面上显示嵌入的pdf。我已经成功地将pfd存储在sql server上的数据库的varbinary字段中。
rows, cols
数组也正确返回pdf的二进制值,问题是它不会在视图上转换为pdf。
第一步: 这是我的模特:
byte[]
这是我的控制器正在执行成功的插入操作:
public class Writing
{
public int ID { get; set; }
public string Title { get; set; }
public string Category { get; set; }
public string Author { get; set; }
public byte[] Material { get; set; }
public string Description { get; set; }
public DateTime DatePublished { get; set; }
}
以下是结果显示为二进制而不是pdf的视图:
[Authorize]
[HttpPost]
public async Task<IActionResult> Insert(Writing writing,List<IFormFile> Material)
{
foreach(var item in Material)
{
if (item.Length > 0)
{
using(var stream = new MemoryStream())
{
await item.CopyToAsync(stream);
writing.Material = stream.ToArray();
}
}
}
dbContext.Writings.Add(writing);
dbContext.SaveChanges();
return RedirectToAction("AdminIndex");
}
我希望看到一个pdf,但是在打开控制台窗口(f12)之后页面是空的。我可以看到返回的pdf的二进制值。模型的其他值在页面上正确显示。
第2步: 我甚至尝试过以下方法:
@{
var base64 = Convert.ToBase64String(Model.Material);
var book = string.Format("data:application/pdf;base64,{0}", base64);
}
<article>
<h1> @Model.Title</h1>
<h5>@Model.Author</h5> <h5>@Model.DatePublished</h5>
<object data=@book type="application/pdf" width="300px" height="900px">
<p><b>Example fallback content</b>: This browser does not support PDFs. Please download the PDF to view it: <a href="/pdf/sample-3pp.pdf">Download PDF</a>.</p>
</object>
</article>
这确实返回pdf,但在pdf之上使用二进制值。 pdf在相同的标签页面打开,非常不方便。
更新:我只是想出了Step2,就像在链接标记中添加 [HttpGet]
public IActionResult Read(int ID)
{
var article = Find(ID);
return File(article.Material, "application/pdf");
}
一样简单。
有人建议让第1步工作吗?