2016-05-11 3 views
1

Я возвращаю файл с ASP.NET MVC-контроллера, и я хочу загрузить его в виде вложения с помощью AngularJS.AngularJS Сохранить файл из ASP.NET MVC Controller

MVC контроллер:

return File(renderedBytes, mimeType); 

AngularJS:

function generatePDF(reportRequest) { 

      var reportController = "Report"; 
      var controllerUrl = ngAppSettings.homeBaseUri + reportController + "/GeneratePDF"; 
      var deferred = $q.defer(); 
      $http({ 
       method: "POST", 
       url: controllerUrl, 
       data: reportRequest 
      }).success(function (data, status, headers, cfg) { 
       //window.open(controllerUrl, "_self", ""); 
       deferred.resolve(data); 
      }).error(function (err, status) { 
       deferred.reject(err); 
      }); 

      return deferred.promise; 

     }; 

Я пробовал различные способы, как предложено на подобные вопросы по этому поводу, но я не получаю его.

Я пробовал this тоже.

Мои контрольные точки попадают без проблем внутри контроллера GeneratePDF, но после этого ничего не происходит. Как я могу это сделать?

EDIT:

Я также попытался angular file saver, но я получаю сообщение об ошибке, что формат должен быть в BLOB. Если я могу только преобразовать ответ в blob, то я думаю, что это может быть так.

ТИА

ответ

1

Если C# контроллер конечной точки возвращает FileContentResult (который кажется, что он делает), то вам не нужно беспокоиться о обещаниях. Вы можете просто сделать следующее ...

function generatePDF(reportRequest) { 
      var reportController = "Report"; 
      var controllerUrl = ngAppSettings.homeBaseUri + reportController + "/GeneratePDF"; 
      window.open(controllerUrl, "_blank"); 
     }; 

Я делаю это в одном из своих приложений и работает как ожидалось. Есть ли конкретная причина, по которой вы использовали услугу $ q, чтобы вернуть обещание?

+0

Это всего лишь дизайн всех моих угловых сервисов, использующих службу $ q, которую я могу игнорировать, если это проблема. Используя window.open, как передать объект reportRequest в качестве параметра для контроллера GeneratePDF? Мне это нужно для обработки данных. –

+1

Ах, извините, пропустил этот бит. Есть ли много данных в reportRequest или это что-то, что может быть представлено в строке запроса «GET» (ака просто базовые примитивы, из которых вы можете сделать строку запроса)? К сожалению, я не знаю, как сделать «POST», чтобы загрузить документ. Если вам нужно отправить тонну данных для обработки, чтобы сгенерировать PDF-файл, вам нужно будет это сделать, и сервер должен передать обратно токен, который вы затем можете использовать для создания GET (используя window.open) который затем вернет FileResult, который каким-то образом кэшируется на сервере. – sourdoughdetzel

+0

Я не могу передать все данные в виде строки запроса, так как запрос содержит список объектов. Сначала я планировал сделать это, но не продолжал. –

Смежные вопросы