Web API 2 - вернуть PDF, показать / загрузить полученный файл PDF на клиенте (AngularJs)
Это код в моем контроллере Web API 2:
//pdfBytes is a valid set of...pdfBytes, how it's generated is irrelevant
Byte[] pdfBytes = pdfConverter.GeneratePdf(myPdfString);
//using HttpResponseMessage instead of IHttpActionResult here because I read
//that the latter can cause problems in this scenario
var response = new HttpResponseMessage();
//Set reponse content to my PDF bytes
response.Content = new ByteArrayContent(pdfBytes);
//Specify content type as PDF - not sure if this is necessary
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
return response;
Как запустить браузер для автоматической загрузки PDF или открыть его в новом окне после получения PDF на клиенте? (Примечание. Я не уверен, является ли байтовый массив тем форматом, который я хочу получить здесь).
callToGetPdfFromDb()
.success(function (pdfFromWebApi) {
console.log('Got pdf...'');
//How do I show the received PDF to the user?
});
Я довольно новичок в работе с любым видом загрузки / выгрузки файлов, поэтому я прошу прощения, если мне не хватает чего-то очень простого. Я совершенно счастлив с указателями в правильном направлении как ответ.
2 ответа
Здесь есть ответ, который работает. Полный вызов / ответ, который работает с кодом C# в вопросе. Обратите внимание, я оставляю вопрос, потому что я думаю, что он немного более конкретен, чем существующие, и мне было трудно найти ответ:
$scope.getPdf= function(){
var pdfReportUrl = yourBaseUrl+ '/generatepdf';
var runDbCallToGetPdf = function(){
return $http({
method: 'GET',
url: pdfReportUrl,
responseType:'arraybuffer'
});
};
runDbCallToGetPdf ()
.success(function (pdfBytes) {
var pdfFile = new Blob([pdfBytes], {type: 'application/pdf'});
var pdfFileUrl = URL.createObjectURL(pdfFile );
window.open(pdfFileUrl);
});
};
Вместо того, чтобы вызывать конечную точку Web Api с углового уровня, вы можете просто открыть ее в новом окне (или вкладке).
var getUrl = //path to web api endpoint to get generated pdf
// make sure to inject $window service
$window.open(getUrl, "_blank");
Если MIME-тип для ответа установлен правильно, браузер сможет открыть PDF-файл.