web-dev-qa-db-ja.com

Angular 8)でExcelファイルをAPI応答としてダウンロードする方法

Excelドキュメントを応答として返すAPIを持っています。リクエストは1つの単純なJSONになります。

私はグーグルを検索し、ファイルをダウンロードするためのコードベースを見つけ、それを自分のアプリケーションで使用しましたが、いくつかのエラーが発生し、解決策を見つけることができません。以下は私のコードベースです。

component.ts

import rxjs/Rx;

details = {id: 75,name: "some name"}

this.nameService.getData(this.details).subscribe(response => {
this.downloadFile(response);
})

downloadFile(data: Response) {
  const blob = new Blob([data], { type: '.xlsx' });
  const url= window.URL.createObjectURL(blob);
  window.open(url);
}

nameService.ts

getData(postData) {
  return this.httpService.post('https://localhost:8080/getFile/', postData);
}

httpService.ts

constructor(private http: HttpClient)
post(apiEndpoint: string, request: any) :Observable<any> {
 return this.http.post<any>(apiEndpoint,request);
}

上記のコードベースを使用すると、2つのエラーが発生し、ファイルがダウンロードされません。

  1. エラーの取得:

Blob(const blob = new Blob([data]、{type: '.xlsx'});)を作成する際の「タイプレスポンスはタイプBlobpartに割り当てられません」

  1. データをany(downloadFile(data:any))に変更すると、上記のエラー(1)はなくなりますが、「構文エラー:json.parseの位置0にあるjosnの予期しないトークンP」としてhttperror応答を受け取ります。

上記の問題の解決策を見つけた人を助けてください。

2
knbibin

ファイルをダウンロードするには、以下のコードを使用します

downloadFile(data: Response) {
  const blob = new Blob([data], { type: 'application/octet-stream' });
  fs.saveAs(blob, fileName + '.xlsx');
}
0
Abhishek Gupta