I am working on an application where I want to download a file after clicking on a button on a template. There are many files that are being displayed on the screen and each file has a separate button. I am sending the index number of the array to the Angular which I want to send as params to backend. But, I also want to add a responseType of blob in my arguments and adding both these arguments is giving me an error. Here's my code:
Angular
onDownloadFiles(i: any)
{
this.fileToDownload = i;
console.log(this.fileToDownload);
const params = new HttpParams().set('id3', this.fileToDownload);
this.http.get('http://localhost:3000/downloadfile', {params}, {responseType: "blob"}) //I want to add both these
.pipe(map(responseData => {
return responseData;
}))
.subscribe(response => {
this.downloadFile(response, ("application/msword" || "application/vnd.openxmlformats-
officedocument.wordprocessingml.document"));
})
}
downloadFile(data: any, type: string)
{
let blob = new Blob([data], {type: type});
let url = window.URL.createObjectURL(blob);
let pwa = window.open(url);
if(!pwa || pwa.closed || typeof pwa.closed == "undefined")
{
alert("Please disable your pop up blocker and try again.");
}
}
It's giving an error that the http.get method can't take more than two arguments. Is there any other way of sending this to backend?
get method accepts two arguments:
In your code, you are passing the params and responseType separately. If you combine both of them into single object that works.