msl*_*ugx 14
对于抱怨最佳解决方案不起作用且只有内容类型在标题中的人,您需要在服务器端设置"访问控制 - 公开 - 标题":"内容 - 处置".我使用的是asp.net核心,然后我必须做以下事情.
app.UseCors(builder =>
builder.WithOrigins(originsAllowed.ToArray())
.AllowAnyMethod()
.AllowAnyHeader()
.WithExposedHeaders("Content-Disposition")
Run Code Online (Sandbox Code Playgroud)
Neh*_*nia 14
使用新的Angular Http,可以在Service代码中尝试以下操作。
downloadLink(): Observable<HttpResponse<Blob>> {
return this.http.get<Blob>(this.someURL, {
observe: 'response',
responseType: 'blob' as 'json'
});
}
Run Code Online (Sandbox Code Playgroud)
并使用上面的作为
this.someService
.downloadLink()
.subscribe(
(resp: HttpResponse<Blob>) => {
console.log(resp.headers.get('content-disposition'));
data = resp.body
});
Run Code Online (Sandbox Code Playgroud)
同样,在服务器端,作为响应,需要设置以下标头。 'Access-Control-Expose-Headers': 'Content-Disposition'
就像在Java Spring Boot中一样,可以使用
final HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=1.xlsx");
headers.add(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, HttpHeaders.CONTENT_DISPOSITION);
Run Code Online (Sandbox Code Playgroud)
Cha*_*Y S 14
在 angular 中,我们可以读取文件名,如下所示,
this.http.post(URL, DATA).subscribe(
(res) => {
var contentDisposition = res.headers.get('content-disposition');
var filename = contentDisposition.split(';')[1].split('filename')[1].split('=')[1].trim();
console.log(filename);
});
Run Code Online (Sandbox Code Playgroud)
但主要是我们需要在API中指定Access-Control-Expose-Header,如下所示,
注意:最后一行是必填的
FileInfo file = new FileInfo(FILEPATH);
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = file.Name
};
response.Content.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition");
Run Code Online (Sandbox Code Playgroud)
Par*_*osh 13
你可以在这里尝试这种代码.
注意:不要使用地图
this.http.post(URL, DATA)
.subscribe((res) => {
var headers = res.headers;
console.log(headers); //<--- Check log for content disposition
var contentDisposition= headers.get('content-disposition');
});
Run Code Online (Sandbox Code Playgroud)
使用 Angular 9 和 Expresss
需要在 Express 中允许此标头
res.setHeader('Access-Control-Expose-Headers', 'Content-Disposition');
Run Code Online (Sandbox Code Playgroud)
角
this.http.get(url, { observe: 'response', responseType: 'blob' as 'json' })
.subscribe((res: any) => {
console.log(res.headers.get('content-disposition'));
});
Run Code Online (Sandbox Code Playgroud)