Как отобразить поток 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));