Fra*_*rti 0 http-post typescript angular
这应该很容易解决,但我知道我的头脑无法找到解决方案。
我有一个这样的帖子:
getAccordo(filtro: Filter): Observable<Response> {
return this.http.post<Response>(`${this.ENDPOINT}/export`,
filtro,
{observe: 'response', responseType: 'blob' as 'json'}
)
.catch(error => this.handleError(error));
}
Run Code Online (Sandbox Code Playgroud)
这就是我使用它的地方:
public getAccordo(event: any): any {debugger;
event.preventDefault();
this.accordiService.getAccordo(this.filter).subscribe(
res => {debugger;
const blob = new Blob([res], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
const anchor = document.createElement('a');
anchor.href = window.URL.createObjectURL(blob);
anchor.download = Utils.extractHeaders(res);
anchor.click();
},
error => {
console.log(error);
}
);
}
Run Code Online (Sandbox Code Playgroud)
当我查看 chrome 控制台时,我可以看到在标题中有一个 content-disposition: attachment; filename="esportazione_accordi_20180905.xlsx"
但在我的“res”中,这是缺失的。
id 喜欢做的是获取文件名并在anchor.download 中使用它。
感谢您的帮助,如果您需要更多信息,请询问。
编辑
这是我从响应标头中获得的标头,我什至看不到其中的一个:
在服务器端我补充说:.header("Access-Control-Expose-Headers", "content-disposition")
但它仍然不起作用
编辑2:
好的,我们越来越近了,我需要获取图片末尾的“文件名”值并将其分配给anchor.download。
为了将此标头公开给您的 Angular XHR,服务器需要设置Access-Control-Expose-Headers
响应标头以允许专门访问Content-Disposition
标头。该文件对这个问题的详细信息:
默认情况下,只公开 6 个简单的响应头:
- 缓存控制
- 内容语言
- 内容类型
- 过期
- 最后修改
- 编译指示
如果您希望客户端能够访问其他标头,则必须使用 Access-Control-Expose-Headers 标头列出它们。
这意味着您的服务器需要设置以下标头:
Access-Control-Expose-Headers: Content-Disposition
Run Code Online (Sandbox Code Playgroud)
在 Angular 中,使用HttpClient
,响应标头被延迟解析- 要获取特定标头的值,您需要使用以下内容到get
标头:
res.headers.get('Content-Disposition');
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
974 次 |
最近记录: |