Как загрузить файл Excel в Angular 8 в качестве ответа API - PullRequest
1 голос
/ 11 октября 2019

У меня есть API, который возвращает документ Excel в качестве ответа. Запрос будет одним простым json.

Я искал в Google и нашел некоторую базу кода для загрузки файла, и я использовал его в своем приложении, но я получаю некоторые ошибки и не могу найти егорешениеНиже приведены мои коды.

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);
}

свыше базы кода я получаю ниже двух ошибок, и файл не загружается.

  1. Получение ошибки:

"Ответ типа не назначается типуBlobpart "при создании BLOB-объекта (const blob = new Blob ([data], {type: '.xlsx'});)

Если я изменю данные как-либо (downloadFile (data: any)), вышеуказанная ошибка (1) исчезнет, ​​но я получу ответ httperror как «Синтаксическая ошибка: неожиданный токен P в josn в позиции 0 в json. parse '

Пожалуйста, помогите, если кто-нибудь найдет решение вышеуказанных проблем.

Ответы [ 2 ]

2 голосов
/ 11 октября 2019

Добавить заголовок { responseType: 'blob'}

Как это:

this.http.post<any>(apiEndpoint,request,{ responseType: 'blob'} )
1 голос
/ 11 октября 2019
  1. Вам необходимо установить заголовок ответа { responseType: 'blob'} в запросе.

  2. Вы должны передать правильный MIME-тип, как высоздание BLOB-файла. (например, application / octet-stream или application / vnd.openxmlformats-officedocument.spreadsheetml.sheet ).

component.ts

downloadFile(data: Response) {
  const blob = new Blob([data], { type: 'application/octet-stream' });
  const url= window.URL.createObjectURL(blob);
  window.open(url);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...