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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.