【发布时间】:2017-08-15 08:13:03
【问题描述】:
解决这个问题我真的很难。我已经尝试了很多不同的解决方案,以至于我不确定现在需要修复哪里。我正在尝试通过 http get 检索 Blob 并使用 FileSaver.js 为用户下载文件 出于某种原因,每次我尝试打开图像时都会收到“损坏、损坏或太大”的消息。我尝试使用“responseType”(更改为“blob”),在标题中添加一个“Accept”。似乎没有什么对我有用!
有人能指出我正确的方向吗?
服务
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不是标题。见docs.angularjs.org/api/ng/service/$http#usage -
FileSaver 不适用于 Safari 或 iOS Safari 浏览器。我相信它应该可以在 Mac 上的 Safari 10.1 中运行,因为该版本表示它支持锚标记中的下载属性(文件保护程序在后台使用什么)