вернуть файл application.pdf в браузер через контроллер asp net mvc показывает код вместо файла - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть pdf-файл в базе данных, который я загрузил в контроллер, и я хочу напрямую вернуться через return. File

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

Данные - это байтовый массив с ~ 76000 байтов. ContentType - это приложение / pdf

Когда я хочу просмотреть результат в веб-браузере (FF или Chrome), я получаю увидеть PDF-код вместо PDF.

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

Буду признателен за любую помощь, потому что это должно быть так просто, но я не могу его найти.

Возврат помещен в индекс ActionResult, и мне нужно, чтобы он был загружен прямо при нажатии на страницу (нет новой страницы с _blank)

Этоправильные данные, потому что когда я использую f12 в Chrome и нажимаю на сеть и данные, я получаю, чтобы просмотреть 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);

, я получаю байтовый массив как представление вместо 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);
    }    

У меня есть оболочка с несколькими регистрационными вкладками, и я хочу показать 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 голосов
/ 25 апреля 2018

Вот что вам нужно сделать:

[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");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...