У меня есть сервер с пружинной загрузкой, доступ к которому осуществляется через внешний интерфейс Angular 5.Доступ к внутреннему серверу осуществляется с использованием конфигурации прокси, которая выглядит следующим образом:
{
"/api/*": {
"target": "http://localhost:8085",
"secure": false,
"changeOrigin": true
}
}
Сервер устанавливает несколько заголовков и возвращает ответ в форме ResponseEntity.Это для запроса GET, который должен возвращать поток для загрузки.
HttpHeaders headers = new HttpHeaders();
headers.add("Access-Control-Expose-Headers", "Content-Type, Content-Disposition, Content-Length");
headers.add("Content-Type","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
headers.add("Content-Disposition", "attachment; filename=" + FILE_NAME);
.
.
<some-logic-here>
.
.
return new ResponseEntity<>(content, headers, HttpStatus.OK);
При отладке приложения через Chrome я вижу возвращаемые данные вместе с заголовками, но по некоторым причинам толькоЗаголовок типа содержимого читается, а не остальные.
Код клиента для отправки запроса таков:
export interface FileResult {
body: any[];
headers: {};
}
getFileByteArray(url: string): Observable<FileResult> {
return this.http.get<FileResult>(this.baseUrl + url, this.options);
}
this.service.getFileByteArray(url).subscribe(fileResult => {
this.showSpinner = false;
//var filename = fileResult.headers; <- This is where the headers are not visible
this.downloadFile(fileResult.body, 'temp');
})
Возвращаются заголовки ответа при просмотре через отладчик Chrome
HTTP/1.1 200 OK
X-Powered-By: Express
Access-Control-Allow-Origin: *
allow-control-allow-origin: *
access-control-allow-headers: Origin, Content-Type, Content-Disposition, Content-Length
access-control-expose-headers: Content-Type, Content-Disposition, Content-Length
content-disposition: attachment; filename=Stats_Workbook_01-SEP-2018_01-SEP-2018.xlsx
content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
content-length: 9803
connection: close
Не уверен, почему они повторяются дважды в приведенном выше фрагменте.