使用AngularJS和Angular-FileSaver.js通过http下载Blob
解决这个问题我真的很难。我已经尝试了很多不同的解决方案,我不确定我现在需要解决什么问题。我试图通过http获取一个Blob,并使用FileSaver.js为用户下载该文件 出于某种原因,每次我试图打开图像时,都会收到一条“损坏、损坏或太大”的消息。我尝试使用“responseType”(更改为“blob”),在标题中添加一个“Accept”。我似乎什么都不管用 谁能给我指一下正确的方向吗 服务使用AngularJS和Angular-FileSaver.js通过http下载Blob,angularjs,filesaver.js,Angularjs,Filesaver.js,解决这个问题我真的很难。我已经尝试了很多不同的解决方案,我不确定我现在需要解决什么问题。我试图通过http获取一个Blob,并使用FileSaver.js为用户下载该文件 出于某种原因,每次我试图打开图像时,都会收到一条“损坏、损坏或太大”的消息。我尝试使用“responseType”(更改为“blob”),在标题中添加一个“Accept”。我似乎什么都不管用 谁能给我指一下正确的方向吗 服务 download: function(blobId, token) { var req = {
download: function(blobId, token) {
var req = {
method: 'GET',
cache: false,
url: 'api/Blob/DownloadBlob/' + blobId,
headers: {
'responseType': 'arraybuffer',
'Authorization': token
}
};
return $http(req)
.then(function (response) {
return response;
}, function(response) {
// something went wrong
return $q.reject(response.data);
});
}
控制器
$scope.downloadFile = function () {
Data.download($scope.blobId, $scope.token).then(function (response) {
var blob = new Blob([response], { type: 'image/png' });
FileSaver.saveAs(blob, 'download.png');
});
};
我看到的前两个问题是
responseType
config属性不应位于headers
对象中response
对象传递给Blob
构造函数,您可能希望在其中传递response.data
return $http.get('api/Blob/DownloadBlob/' + blobId, {
responseType: 'blob',
headers: {
Authorization: token
},
transformResponse: function(data) {
return data // there's no need to attempt any transformations
}
}).then(function(response) {
return response.data // your provider consumers only need the blob data
})
在你的消费者中
Data.download($scope.blobId, $scope.token).then(function(blob) {
FileSaver.saveAs(blob, 'download.png')
})
responseType
不是标题。请参阅FileSaver不适用于Safari或iOS Safari浏览器。我认为它应该在Mac上的Safari 10.1中工作,因为该版本说它支持锚标记中的下载属性(filesaver在引擎盖下使用的内容),filesaver不适用于Safari或iOS Safari浏览器。我认为它应该在Mac上的Safari 10.1中工作,因为该版本说它支持锚定标记中的下载属性(filesaver在引擎盖下使用的内容)。@Patrick我建议你对上述问题添加评论,以便Nick可以看到它。他是使用FileSaver的人,而不是meI。答案也是这样。我也在使用FileSaver,所以如果他需要支持这些浏览器,我想确保知道这些限制。