2016-05-11 9 views
1

Ich gebe eine Datei von einem ASP.NET MVC-Controller und ich möchte es als Anhang mit AngularJS herunterladen.AngularJS Datei von ASP.NET MVC Controller speichern

MVC Controller:

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; 

     }; 

ich verschiedene Weise versucht haben, als auf den ähnlichen Fragen zu diesem Thema vorgeschlagen, aber ich bekomme es nicht.

Ich habe this auch versucht.

Meine Breakpoints treffen ohne Probleme im GeneratePDF-Controller, danach passiert nichts mehr. Wie würde ich darüber gehen?

EDIT:

Ich habe auch versucht angular file saver aber ich erhalte eine Fehlermeldung, dass das Format in BLOB sein sollte. Wenn ich die Antwort nur auf einen Blob umwandeln kann, dann denke ich, dass es das sein könnte.

TIA

Antwort

1

Wenn Ihr C# Controller-Endpunkt eine Filecontentresult zurück (was es scheint, dass es der Fall ist), dann sollten Sie sich nicht um Versprechen zu kümmern. Sie können einfach folgendes tun ...

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

Ich mache das in einer meiner Apps und es funktioniert wie erwartet. Gibt es einen bestimmten Grund, warum Sie den $ q-Service verwendet haben, um ein Versprechen abzugeben?

+0

Es ist nur das Design aller meiner eckigen Dienste verwendet $ q Service, die ich ignorieren kann, wenn dies ein Problem ist. Wie übergebe ich mit window.open mein reportRequest-Objekt als Parameter für den GeneratePDF-Controller? Ich brauche es für die Datenverarbeitung. –

+1

Ah, sorry, habe das bisschen übersehen. Gibt es eine Menge Daten in der reportRequest oder ist es etwas, das in einer "GET" -Abfragezeichenfolge dargestellt werden könnte (auch bekannt als einfache Grundelemente, aus denen Sie eine Abfragezeichenfolge erstellen können)? Leider ist mir keine Möglichkeit bekannt, einen "POST" zu machen, um das Dokument herunterzuladen. Wenn Sie eine Menge Daten zurück zum Prozess senden müssen, um das PDF zu generieren, müssen Sie dies entweder tun und den Server ein Token zurückgeben lassen, das Sie dann verwenden können, um ein GET zu tun (mit window.open) das wird dann das FileResult zurückgeben, das auf dem Server auf irgendeine Weise zwischengespeichert wird. – sourdoughdetzel

+0

Ich kann nicht alle Daten als Abfragezeichenfolge übergeben, da die Anforderung eine Liste von Objekten enthält. Ich plante das auch zuerst, ging aber nicht weiter. –

Verwandte Themen