通过asp net mvc controller将文件application.pdf返回浏览器显示代码而不是文件

时间:2018-04-25 13:20:46

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

我在数据库中有一个pdf文件,我在控制器中加载并直接想通过返回文件返回

return File(document.Data, document.ContentType);

数据是带有~76000字节的bytearray ContentType是application / pdf

当我想在webbrowser(FF或Chrome)中查看结果时,我会看到pdf代码而不是pdf。

%PDF-1.4 %���� 1 0 obj <>stream x��� and so on

感谢任何帮助,因为它必须如此简单,但我无法找到它。

返回位于ActionResult索引中,我需要在页面上单击时加载它(没有带有_blank的新页面)

这是正确的数据,因为当我在chrome中使用f12并点击网络时,我会将数据作为一个整体来查看pdf

EDIT1:

[HttpGet]
    public ActionResult Index(int Id)
    {
        InitMvcApplicationMenu();

...

        var document = WebApi.LoadDocument(DocumentGuid.Value);
        var byteArray = document.Data;
        if (byteArray == null)
        {
            return null;
        }
        Stream stream = new MemoryStream(byteArray);


        if (document == null)
        {
            return View("NoDocument");
        }

        Response.AppendHeader("content-disposition", "inline; filename=file.pdf");
        return File(stream, document.ContentType, "document.pdf");
    }

这样我收到错误没有找到文件。当我以前用

的方式使用它时
return File(document.Data, document.ContentType);

我将bytearray视为视图而不是pdf,但找到了文件

编辑2:

public ActionResult Index(int Id)
    {
        InitMvcApplicationMenu();
        var entity = WebApi.LoadItem(Id);
        var DocumentGuid = entity.ReportDocumentGUID;
        if (DocumentGuid == Guid.Empty)
        {
            return View("NoDocument");
        }
        var document = WebApi.LoadItem(DocumentGuid.Value); 

        if (document == null)
        {
            return View("NoStatusReportDocument");
        }

        var cd = new ContentDisposition
        {
            FileName = document.Name,
            Inline = true
        };

        Response.Headers.Add("Content-Disposition", cd.ToString());
        return File(document.Data, document.ContentType);
    }    

我有一个包含多个registertab的包装器,并希望在选择文档选项卡时在选项卡中显示pdf。

这发生在这里:

    my.onHashChanged = function (e) {

    var feature = jHash.val('feature');

    my.loadTab(feature);
}

 my.loadTab = function (feature) {
    if (feature) {
        $("#tabstrip-content").html("Loading...");
        applicationUIModule.loadPartialView(feature, "Index", { Id: $("#Id").val()}
            , function (data) {


            }
            , null
            , $("#tabstrip-content")
        );
    }
}

    my.onTabSelect = function (e) {
    var feature = $(e.item).data("feature");
    applicationUIModule.updateHash("feature", feature);
}

1 个答案:

答案 0 :(得分:0)

这就是你要做的事情:

[HttpGet]
public IActionResult document(int id)
{
      var byteArray = db.instances.Where(c => c.id == id).FirstOrDefault().document;    
      if (byteArray == null)
      {
            return null;
      }
      Stream stream = new MemoryStream(byteArray);

      Response.AppendHeader("content-disposition", "inline; filename=file.pdf");
      return File(stream, "application/pdf", "document.pdf");
}