无法在MVC中加载PDF文档

时间:2016-10-12 16:08:08

标签: asp.net-mvc pdf

当我第一次测试这段代码时,似乎工作正常,但现在我收到了一个bug。

无法加载PDF文档

我通过我的管理功能上传了一个pdf,它进入了一个数据库,然后我在我的控制器中有一个动作,允许一个人在点击它时下载该pdf。

然而,它似乎并不总是有效。我也无法真正确定导致它破裂的原因。如果文件大小超过78 kb,则Chrome / Edge无法打开文档。如果文件低于75 kb Chrome / IE打开它就好了。我不确定为什么会这样。

我已将控制器包含在

下面
public ActionResult DownloadPdf(int Id) {
    var dbTest = _testRepository.FindId(Id);
    var cd = new System.Net.Mime.ContentDisposition { FileName = dbTest.PdfName, Inline = true };
    Response.AddHeader("Content-Disposition", cd.ToString());
    return File(dbTest.PdfData, "application/pdf");
}

这是我的观点

@if (Model.Test.HasPdf)
    {
        <a data-bind="css: { disabled: !form() }" href="@Url.Action("DownloadPdf", "Test", new { Id = Model.Test.Id })" target="_blank" id="launchBtn" class="btn btn-pdf">Download PDF Form</a>
}

有没有其他人有这样的错误?如果是这样,你是如何解决的?

2 个答案:

答案 0 :(得分:0)

我明白了。它与我的下载功能无关,它在我的HTTPPost

if (vm.FileData != null)
    {
        using (var stream = new System.IO.MemoryStream(vm.FileData.ContentLength\\This code between the parenthesis was missing))
        {
            vm.FileData.InputStream.CopyTo(stream);
            test.FileData = stream.GetBuffer();
            test.FileName = vm.FileData.FileName;
        }

答案 1 :(得分:-1)

假设你的&#34; dbTest&#34;有一个属性,PDF内容为字节数组(byte [])。

直接下载文件

public ActionResult DownloadPdf(int Id) {
    var dbTest = _testRepository.FindId(Id);

    Response.ContentType = "application/pdf";
    Response.AppendHeader("Content-Disposition", $"filename={dbTest.PdfName}");
    Response.AppendHeader("Content-Length", dbTest.PdfData.Length.ToString(CultureInfo.InvariantCulture));
    Response.BinaryWrite(dbTest.PdfData);
    Response.End();

    return null;
}

或在新的浏览器标签页中打开文件

public ActionResult DownloadPdf(int Id) {
    var dbTest = _testRepository.FindId(Id);
    return File(dbTest.PdfData, "application/pdf", dbTest.PdfName);
}

我希望这有助于你