在ASP.NET视图中显示来自VarBinary的PDF

时间:2017-12-06 23:01:46

标签: c# asp.net asp.net-mvc pdf view

我正在尝试在页面上显示嵌入的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步工作吗?

0 个答案:

没有答案