Как отобразить поток PDF в MVC

Я использую MVC для отображения содержимого PDF в View, но он не отображается должным образом.

Действие контроллера:

    [HttpPost]
    public ActionResult GetDocumentContent()
    {
        byte[] result;

        result = System.IO.File.ReadAllBytes(@"C:\test.pdf");

        Response.AppendHeader("Content-Disposition", new System.Net.Mime.ContentDisposition
        {
            FileName = "document.pdf",
            Inline = true,
        }.ToString());

        return  File(result, "application/pdf");
    }

Jquery:

        var url = "/DocumentContent/GetDocumentContent";
        var self = this;
        $.post(url, null,function (data) {
            debugger;
            var obj = $('<object type="application/pdf" width="100%" height="100%" border="2"></object>');
            obj.attr('data', data);
            $('#divContainer').append(obj);              
        });

В чем ошибка в этом коде? Как отобразить поток PDF в View?

1 ответ

Атрибут данных - это URL, а не фактические данные.
Также обратите внимание, что данные, которые вы получаете, являются текстовыми, так как $.post еще не может вернуть двоичный результат.
Одним из решений было бы изменить тип запроса на GET(поскольку вы не публикуете какие-либо данные) и просто поместить URL-адрес в атрибут данных объекта

var url = "/DocumentContent/GetDocumentContent";
var obj = $('<object type="application/pdf" width="100%" height="100%" border="2" data="'+url+'"></object>');
$('#divContainer').append(obj); 

РЕДАКТИРОВАТЬ
Вы можете, но вам придется использовать голый XMLHttpRequest с использованием XHR2, что-то вроде.

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
    if (this.readyState == 4 && this.status == 200){
        var URL = window.URL || window.webkitURL;
        var blobUrl = URL.createObjectURL(this.response);
        var obj = $('<object type="application/pdf" width="100%" height="100%" border="2" data="'+blobUrl+'"></object>');
        $('#divContainer').append(obj); 
    }
}
xhr.open('POST', "/DocumentContent/GetDocumentContent");
xhr.responseType = 'blob';
xhr.send('parameter='+encodeURIComponent(some_data));      
Другие вопросы по тегам