I\'ve an API which returns an excel document as response. The request will be one simple json.
I\'ve searched google and found some code base to download the file and I
While using { responseType: 'blob'}
as said by most answers here works, I'd suggest using responseType: 'arraybuffer'
instead of blob
with observe: 'response'
. Your call would then look like this:
this.httpClient.get(resource, {
headers: this.httpHeaders, // Any custom client side headers like Authorization
observe: 'response',
responseType: 'arraybuffer'
});
The advantage of this is two-fold:
blob
or an arraybuffer
, using the Content-Type
observe: 'response'
will also include the response headers that you set at the server in the parsed response.I use this method to put the filename and the MIME Type of the arraybuffer
in the Content-Disposition
and Content-Type
response headers and then use a generic download service at the client-side.
Also, I would suggest using a File
object instead of just the Blob
, which gives you the flexibility of giving it a filename like so:
public downloadFile(response: any, fileName?: string) {
const blob = new Blob([response.body], { type: response.headers.get('content-type') });
fileName = fileName || response.headers.get('content-disposition').split(';')[0];
const file = new File([blob], fileName, { type: response.headers.get('content-type') });
saveAs(file);
}
This will also solve the problem that @knbibin raised about using a custom filename.