使用AngularJS和Angular-FileSaver.js通过http下载Blob

使用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 = {

解决这个问题我真的很难。我已经尝试了很多不同的解决方案,我不确定我现在需要解决什么问题。我试图通过http获取一个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
    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,所以如果他需要支持这些浏览器,我想确保知道这些限制。