2016-05-31 14 views
1

ich eine POST-Anforderung wie diese haben:Arraybuffer AngularJS POST-Anfrage

$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); 
       }); 
} 

Mit diesem Aufruf ich einige Parameter senden sie in einer Tabelle in meiner db und als Antwort zu speichern habe ich eine PDF-Stream. Die Anfrage an den Server es korrekt zurückgibt 200 und alle Parameter sind korrigiert und alles ist in db gespeichert, aber die PDF funktioniert nicht. Ich habe einen Fehler in der Konsole:

und wenn ich die Anfrage debuggen geht es in der .error-Funktion. Ich denke, das Problem ist, dass es nicht erkennt, dass es einen Stream herunterladen muss und, ich weiß nicht, es funktioniert nicht. Ich denke nur

responseType : 'arraybuffer' 

irgendwo wird es funktioniert, aber ich weiß nicht wo! Ich kann die Struktur der Parameter nicht berühren. Irgendeine Idee?

EDIT: Ich habe versucht, wie hier geschrieben dies ohne Ergebnisse How to read binary data in AngularJS in an ArrayBuffer?

+0

Mögliche Duplikat von [Wie Binärdaten in AngularJS lesen in einem ArrayBuffer?] (http://stackoverflow.com/questions/16791295/how-to-read-binary-data-in-angularjs-in- -an-arraybuffer) –

+0

Es ist kein Duplikat, ich habe es bereits ohne Erfolg versucht –

+0

Sie haben die Config-Eigenschaften als drittes Argument übergeben? Get, und post verwenden Sie eine andere Anzahl von Argumenten, bekommen hat die Config-Optionen als das zweite Argument, während Post verwendet es als das dritte Argument –

Antwort

0

Versuchen:

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

-Controller

$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 
    }); 
} 
Verwandte Themen