AngularJS: метод $http.get для загрузки файла PDF

  • Я использую метод $http.get(...) в SPA, чтобы загрузить PDF.
  • В СПА методом печати выведите бланк pdf.
  • Но когда я сделал отладку, данные приходят из API.

Вы можете помочь в этом?

Это реализация API для ответа на поток как application / pdf

public Stream GetConsumerInformationReport(Guid id)
 {
   ..........
   var stream = cryRpt.ExportToStream(ExportFormatType.PortableDocFormat);
   return stream;
}

SPA реализация получения данных из API

var print = function () {
            var downloadPath = apiEndPoint + 'Reports/' + $state.current.data.printPrefix + '.pdf';
            $http.get(downloadPath,httpConfig).
                success(function (data) {
                    var blob = new Blob([data], { type: "application/pdf" });
                    var objectUrl = URL.createObjectURL(blob);
                    $window.open(objectUrl);
            }).
            error(function (data, status, headers, config) {
            // if there's an error you should see it here
            });

        };

1 ответ

Используйте FileSaver.js отсюда http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js

Затем определите свой метод загрузки следующим образом. Воспринимайте это только как вдохновение, не копируйте-вставляйте-запускайте:) Оригинальную версию можно найти здесь - http://davidjs.com/2015/07/download-files-via-post-request-in-angularjs/

    //Define method download() in your ng controller

    $scope.download = () => {
          //Indicates that download is in progress
          $scope.isDownloading = true;

          return $http.get(downloadPath,httpConfig).$promise.then((data: any) => {
                  //using saveAs.js (part of upcoming HTML5 API, but so far a polyfill)
                  var blob = data.response.blob;

                  var fileName: string = data.response.fileName || 'document.pdf';

                  //SaveAs is available at saveAs.js from http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js
                  (<any>$window).saveAs(blob, fileName);
              })
              .finally(() => {
                 $scope.isDownloading = false;
          });
      }
Другие вопросы по тегам