22

I am trying to get a file (array buffer) from my backend using the new HttpClient.

My code is pretty much like the following:

this.http.post(url, body, {responseType: 'blob', observe: 'response'})
  .subscribe(resp => {
    console.log(resp.headers.get('content-disposition'));
  });

The repsonse in my browser console is null

When I take a look at the network tab, then I see that content-disposition has a value like attachment; filename="whatever"

If I try to get content-type instead, then I receive something.

Have you experienced something similar or can you tell me what I have to do else? Many thanks

1

2 Answers 2

60

I had the same Issue and found this https://stackoverflow.com/a/45482346/1909698

It worked for me after adding 'Access-Control-Expose-Headers': 'Content-Disposition' in my backend response header.

Sign up to request clarification or add additional context in comments.

4 Comments

That was exactly what I searched for. Solved my problem. Thank you =)
Thanks! This was also useful: stackoverflow.com/questions/38897764/…
Thanks great find, the issue is so misleading because in browser you see the content-disposition but angular does not see it until you tell the server specifically to expose the specific header.
I didn't need 'Access-Control-Expose-Headers': 'Content-Disposition' in Angular 12 (anymore?!)
0

if your backend is using SpringSecurity you need add ExposeHeader to configuration source:

@Bean
protected CorsConfigurationSource corsConfigurationSource() {
    CorsConfiguration configuration = new CorsConfiguration();
    configuration.addExposedHeader("Content-Disposition");
    return source;
}

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.