如何在MVC中显示PDF流

时间:2015-04-06 21:51:00

标签: html pdf model-view-controller view filecontentresult

我正在使用MVC在View中显示PDF内容,但它无法正确呈现。

控制器操作:

    [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);              
        });

此代码中的错误是什么?如何在View中显示PDF流?

1 个答案:

答案 0 :(得分:0)

数据属性是网址,而不是实际数据 另请注意,您收到的数据是文本,因为$ .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); 

EDIT
你可以但是你必须使用XHR2来使用裸XMLHttpRequest,比如。

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));