arrayBuffer AngularJs POST请求

时间:2016-05-31 13:54:13

标签: javascript angularjs rest blob

我有这样的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);
                });
}

通过此调用,我发送一些参数将它们保存在我的数据库中的表中,并作为响应我有一个pdf流。对服务器的请求正确返回200并且所有参数都已更正,所有内容都保存在db中,但pdf不起作用。我在控制台中遇到错误:

SyntaxError: Unexpected token %

如果我调试请求它进入.error函数。我认为问题在于它无法识别它需要下载流,而且我不知道它不起作用。我想只需添加

responseType : 'arraybuffer'
某处它会起作用,但我不知道在哪里!我无法触及参数的结构..任何想法?

编辑:我在这里写的没有结果 How to read binary data in AngularJS in an ArrayBuffer?

1 个答案:

答案 0 :(得分: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
    });
}