Angular 7 не загружает файл должным образом - PullRequest
0 голосов
/ 11 марта 2019

Я новичок в Angular.Я начал использовать Angular 7. Я пытаюсь загрузить файл Excel в формате Angular.Вот мой сервисный код.

event.service.ts

getReport(reporturl: string) {
        return this.http.get(reporturl, { responseType: 'arraybuffer' })
            .pipe(
                // tap(data => console.log('getEvent: ' + JSON.stringify(data))),
                catchError(this.handleError)
            );
    }

В моем файле компонента

event.ts

handleExcelDownload(data) {
    this.eventService.getReport(`${data}/true`)
      .subscribe(
        (response: any) => {
          console.log(response);
          this.showFile(response, "Grid.xlsx");
          // let mediaType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
          // let blob = new Blob([response], { type: mediaType });
          // let filename = 'Grid.xlsx';
          // saveAs(blob, filename);
        },
        (error: any) => this.errorMessage = <any>error
      );
  }

  private showFile(blob: any, filename: string) {
    // It is necessary to create a new blob object with mime-type 
    // explicitly set otherwise only Chrome works like it should
    let newBlob = new Blob([blob], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" });

    // IE doesn't allow using a blob object directly as link href 
    // instead it is necessary to use msSaveOrOpenBlob
    if (window.navigator && window.navigator.msSaveOrOpenBlob) {
      window.navigator.msSaveOrOpenBlob(newBlob);
      return;
    }

    // For other browsers: 
    // Create a link pointing to the ObjectURL containing the blob.
    let data = window.URL.createObjectURL(newBlob);
    let link = document.createElement('a');
    link.href = data;
    link.download = filename;
    link.click();
    setTimeout(() => {
      // For Firefox it is necessary to delay revoking the ObjectURL
      window.URL.revokeObjectURL(data);
    }, 100);
  }

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

** Запрос **

Second Request

Запрос имеет 200 успехов, и когда я предпросмотрюзапрос, он имеет буфер массива.

Предварительный просмотр ответа.

Array buffer

Но если я открою этоСервер URL-адрес вручную в этот момент файл загружается, и это не повреждено.Пожалуйста, помогите, где я иду не так?Я пробовал много статей в интернете, но ни одна из них не работает.

...