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-файл.

Другие вопросы по тегам