2016-05-31 5 views
1

:この呼び出しでarrayBuffer AngularJs POSTリクエスト

$scope.myFunction = function (name, id, value) { 
     $http.post(/retrievePDFFiles, { 
        name: name, 
        id: id, 
        value: value 
       }).success(function(data, headers) { 
        var filename = headers('filename'); 
        if(data.byteLength > 250) { 
         var blob = new Blob([data], {type : 'application/pdf;charset=utf-8'}); 
         saveAs(blob, filename); 
        } else { 
         console.log("Error"); 
        } 

       }).error(function(data) { 
        console.log(data); 
       }); 
} 

は、私は私のDBにテーブルに保存するためにいくつかのパラメータを送信し、応答として、私は、PDFストリームを持っています。サーバーへの要求は正しく返され、すべてのパラメーターは訂正され、すべてがdbに保存されますが、pdfは機能しません。コンソールでエラーが発生しました:

SyntaxError: Unexpected token % 

そして、私がリクエストをデバッグすると、エラーが発生します。問題は、ストリームをダウンロードする必要があることを認識せず、わかりません。うまくいきません。私はちょうど追加と思います。

responseType : 'arraybuffer' 

どこかで動作しますが、私はどこか分かりません!私はパラメータの構造に触れることはできません..任意のアイデア?

編集:なし結果とここに書かれたように私は How to read binary data in AngularJS in an ArrayBuffer?

+0

可能な重複[AngularJSでバイナリデータを読み込む方法ArrayBuffer?](http://stackoverflow.com/questions/16791295/how-to-read-binary-data-in-angularjs-in -an-arraybuffer) –

+0

これは重複していません。すでに成功しています。 –

+0

3番目の引数として設定プロパティを渡しましたか? getとpostを異なる数の引数を使用して取得するには、postオプションが第3引数として使用されている間にconfigオプションを第2引数として取得します。 –

答えて

0

これを試してみました:

app.factory('apiService', ['$http', function($http){ 
    return { 
     downloadFile: function(url, file) { 
      return $http({ 
       url: url, 
       method: 'POST', 
       data: file, 
       responseType: 'arrayBuffer' 
      }); 
     } 
    }; 
}]); 

コントローラーを

$scope.download = function(name, id, value) { 
    //form the payload for file download 
    var payload = { 
     name: name, 
     id: id, 
     value: value 
    }; 

    //execute service to download 
    apiService.downloadFile('/retrievePdfFiles', payload).then(function(response) { 
     //download the blob 
     var contentType = response.headers()['content-type'] || octetStreamMime; 
     var blob = new Blob([response.data], contentType); 
    }).catch(function(response){ 
     //there's been an error 
    }); 
}