我遇到了一个问题,但是无法找到任何解决方案。如果这个问题在某种程度上与其他人重复,请提前道歉。
问题是我向后端发送GET
请求并收到响应。响应正文中有Blob
。我试图下载它,但是在获取文件名以命名我的下载文件之前。在本地一切都很好。但在外部版本中,文件无法下载。我在单击按钮后获得响应,并看到我进入了FileUtil
中的保存函数。但是下载没有开始。有没有人知道问题所在?
以下是Chrome检查工具中网络选项卡中的响应(如您所见,所有标题均已接收)
download.service.ts
downloadFile(id: string) {
return this.apiService.getFile(id).pipe(
map(response => {
const data = response.body;
const blob = new Blob([data], { type: 'application/zip' });
FileUtil.save(blob, this.getFileName(response.headers));
})
)
}
private getFileName(headers: HttpHeaders) {
const contentDisposition = headers.get('Content-Disposition') || '';
const matches = /filename=([^;]+)/ig.exec(contentDisposition);
const fileName = (matches[1] || 'file.zip').trim();
return fileName;
}
api.service.ts
getFile(id: string): Observable<HttpResponse<Blob>> {
return this.httpClient.get<Blob>(requestUrl, {responseType: 'blob' as 'json', observe: 'response'});
}
FileUtil.ts
static save(data: Blob, name: string) {
const a = document.createElement('a');
document.body.appendChild(a);
const url = window.URL.createObjectURL(data);
a.href = url;
const filename = name;
a.download = filename;
a.click();
setTimeout(() => {
window.URL.revokeObjectURL(url);
document.body.removeChild(a);
}, 0);
}