AngularJS-解压后下载后获得无效的zip

时间:2019-04-05 11:26:10

标签: javascript angularjs

我需要通过发布请求来下载zip文件。 Fraom后端,他们正在压缩文件并发送。

他们设置的后端值

Content-Disposition →attachment;
filename="sample.zip"
Content-Type →application/zip 

UI代码:

downloadMethod = function (path, item) {
      var promise = $http({ 
          method: "POST",
          data: item,
          url: API_SERVER.url+path,
          headers: { 'Content-Type': 'application/zip; charset=UTF-8'},
          responseType: 'arraybuffer'
      });
      promise.success(function(response, status, headers, conf) { 
        return response;
      }).error(function(response){
        return response;
      });
      return promise;
  };

成功后,我将使用Filesaver保存文件

var blob = new Blob([data)], {type:"application/zip"});
            saveAs(blob, "sample.zip");

文件正在下载。但是在提取文件时出现错误

错误:找不到中央目录

并且无法打开文件,或者它不是有效的zip文件。

但是当我尝试从邮递员那里访问api时,它已经被下载并且可以提取文件了。

1 个答案:

答案 0 :(得分:0)

.success.error方法替换.then.catch方法:

downloadMethod = function (path, item) {
      var promise = $http({ 
          method: "POST",
          data: item,
          url: API_SERVER.url+path,
          headers: { 'Content-Type': 'application/zip; charset=UTF-8'},
          responseType: 'arraybuffer'
      });
      promise.then(function(response) { 
        ̶r̶e̶t̶u̶r̶n̶ ̶r̶e̶s̶p̶o̶n̶s̶e̶;̶
        return response.data;
      }).catch(function(response){
        ̶r̶e̶t̶u̶r̶n̶ ̶r̶e̶s̶p̶o̶n̶s̶e̶;̶
        throw response;
      });
      return promise;
  };

不推荐使用的.success.error方法忽略返回语句

还请注意,签名是不同的。

有关更多信息,请参见