Angular - Post request failing to download pdf file

Viewed 567

I am trying to do a POST request to download a pdf file from the sever. The error I get is message: "Http failure during parsing". I'm not sure why it would work for a GET request but not for a POST request or I am missing something.

 this.httpClient.post(url, {
      responseType: 'blob' as 'json',
      observe: 'response'
    })
    .pipe(take(1))
    .subscribe((data:HttpResponse<Blob>) => {
      const blob = new Blob([data.body], { type: 'application/pdf' });
      saveAs(blob, 'test.pdf');
    });

However if I do a GET request, it seems to work.

   this.httpClient.get<Blob>(url,
      {
        observe: 'response',
        responseType: (('blob') as any) as 'json'
      })
     .pipe(take(1))
     .subscribe(
       (response: HttpResponse<Blob>) => {
         const blob = new Blob([response.body], { type: mediaType });
         saveAs(blob, 'Report.pdf');
       },
       (error: any) => {
         console.error(error);
       }
     );

Server

        [HttpPost]
        [Route("download/{id}")]
        public IHttpActionResult DownloadPdf()
        {
            var buffer = _test.RenderDrawing();
            var result = new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new ByteArrayContent(buffer)
            };

            result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
            {
                FileName = $"Test.pdf"
            };

            result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
            return ResponseMessage(result);
        }
1 Answers

In you post request, you are defining types differently. try something like this:

this.httpClient.post(url, {
      responseType: 'blob',
      observe: 'response'
    })
    .pipe(take(1))
    .subscribe((data:HttpResponse<Blob>) => {
      const blob = new Blob([data.body], { type: 'application/pdf' });
      saveAs(blob, 'test.pdf');
    });
Related