后端Java代码需要设置response的header,如下
response.setContentType("application/octet-stream; charset=utf8");
response.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_OCTET_STREAM_VALUE);
response.setHeader(HttpHeaders.CONTENT_DISPOSITION,"attachment; filename="+zipName);
Angular/Typescript需要使用File类来重命名
download() {
const
token =
localStorage.
getItem('
token');
let
headers:
HttpHeaders = new
HttpHeaders();
headers =
headers
.
set('
Authorization', '
Bearer ' +
token);
const url = 'http://localhost:8764/api/v1/user/downLoadZipFile';
this.
http.
get(
url, {headers:
headers, observe: '
response', responseType: '
blob'}).
subscribe(
response
=> {
console.
log(
response);
console.
log(
response.headers.
keys());
this.
downloadFile(
response);
}, (
error:
HttpErrorResponse)
=> {
console.
log(
error.
error);
});
}
downloadFile(
data:
HttpResponse<
Blob>) {
const
file = new
Blob([
data.body], {type: '
application/zip'});
const
a = document.
createElement('
a');
a.id = '
tempId';
document.body.
appendChild(
a);
a.
download = '
haha.zip';
a.href =
URL.
createObjectURL(
file);
a.
click();
const
tempA = document.
getElementById('
tempId');
if (
tempA) {
tempA.parentNode.
removeChild(
tempA);
}
}
}
关于File类,可以参考以下文档
https://developer.mozilla.org/zh-CN/docs/Web/API/File