0

我正在使用 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");
    }

查询:

        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 流?

4

1 回答 1

0

data 属性是一个 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); 

编辑
你可以,但你必须使用 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));      
于 2015-04-06T22:04:55.077 回答