2016-05-11 11 views
1

ASP.NET MVCコントローラからファイルを返すので、AngularJSを使用して添付ファイルとしてダウンロードしたいと思います。AngularJS ASP.NET MVCコントローラのファイルを保存

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である必要があり、エラーを取得しています。応答をブロブに変換できるのであれば、これはそれかもしれないと思います。

TIA

答えて

1

あなたのC#のコントローラのエンドポイントが(それがないことが表示されます)FileContentResultを返した場合、あなたは約束を心配する必要はありません。あなたは単純に次のことを行うことができます...

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

私はこれを私のアプリケーションの1つで実行しており、期待通りに動作しています。約束を返すために$ qサービスを使用していた特別な理由はありますか?

+0

これは問題であれば私の角度サービスは$ qサービスを使用していますが、無視することができます。 window.openを使用して、GeneratePDFコントローラのパラメータとしてreportRequestオブジェクトをどのように渡しますか?私はデータ処理のためにそれが必要です。 –

+1

ああ、申し訳ありませんが、少し見落としました。 reportRequestに大量のデータがあるのですか、または「GET」クエリ文字列(クエリ文字列を作成する基本的なプリミティブとも呼ばれます)で表現できるものですか?残念ながら、私はdocをダウンロードするために "POST"を行う方法を知らない。 pdfを生成するために大量のデータを処理する必要がある場合は、それを行い、サーバがGET(window.openを使用して)するために使用できるトークンを戻すようにするか、それは何らかの方法でサーバー上にキャッシュされているFileResultを返します。 – sourdoughdetzel

+0

リクエストにオブジェクトのリストが含まれているため、すべてのデータをクエリ文字列として渡すことはできません。私は最初もそれをやろうと計画していたが、進まなかった。 –

関連する問題