Не могу увидеть заголовки http поста [Angular4] - PullRequest
0 голосов
/ 05 сентября 2018

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

У меня есть такая запись:

getAccordo(filtro: Filter): Observable<Response>  {
    return this.http.post<Response>(`${this.ENDPOINT}/export`,
        filtro,
        {observe: 'response', responseType: 'blob' as 'json'}   
    )
        .catch(error => this.handleError(error));
}

И вот где я его использую:

  public getAccordo(event: any): any {debugger;
    event.preventDefault();
    this.accordiService.getAccordo(this.filter).subscribe(
      res => {debugger;
        const blob = new Blob([res], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
        const anchor = document.createElement('a');
        anchor.href = window.URL.createObjectURL(blob);
        anchor.download = Utils.extractHeaders(res);
        anchor.click();
      },
      error => {
        console.log(error);
      }
    );
  }

Когда я смотрю консоль Chrome, я вижу, что в заголовках есть content-disposition: attachment; filename="esportazione_accordi_20180905.xlsx"

Но в моем «res» это отсутствует.

Res

То, что хотел бы сделать, это получить имя файла и использовать его в anchor.download.

Спасибо за помощь, если вам нужно что-то еще, просто спросите.

EDIT

Это заголовки, которые я получаю от заголовков ответа, я не вижу ни одного из них:

enter image description here

На серверной стороне я добавил: .header("Access-Control-Expose-Headers", "content-disposition") Но все равно это не работает

РЕДАКТИРОВАТЬ 2:

Хорошо, мы приближаемся, мне нужно получить значение «filename» в конце картинки и присвоить его anchor.download.

enter image description here

1 Ответ

0 голосов
/ 05 сентября 2018

Чтобы выставить этот заголовок для вашего Angular XHR, сервер должен будет установить заголовок ответа Access-Control-Expose-Headers, чтобы разрешить конкретный доступ к заголовку Content-Disposition. В документах есть больше информации по теме:

По умолчанию отображаются только 6 простых заголовков ответов:

  • Cache-Control
  • Content-Language
  • Content-Type
  • 1021 * Истекает *
  • Last-Modified
  • Pragma

Если вы хотите, чтобы клиенты имели доступ к другим заголовкам, вы должны перечислить их с помощью заголовка Access-Control-Expose-Headers.

Это означает, что ваш сервер должен установить следующий заголовок:

Access-Control-Expose-Headers: Content-Disposition

В Angular, используя HttpClient, заголовки ответа лениво анализируются - Чтобы получить определенное значение заголовка, вам нужно get заголовок, используя что-то вроде этого:

res.headers.get('Content-Disposition');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...