我需要通过发布请求来下载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时,它已经被下载并且可以提取文件了。
答案 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
方法忽略返回语句。
还请注意,签名是不同的。
有关更多信息,请参见