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