Я пытаюсь загрузить огромный CSV-файл с сервера, который создается на лету.
Я возвращаю ResponseEntity<StreamingResponseBody>
в асинхронном режиме, поэтому, как только у меня есть часть моих данных, я возвращаю ее.
это код моего контроллера:
StreamingResponseBody streamingResponseBody = out -> {
csvService.exportToCsvBySessionId(applicationId, sessionIdsInRange, out, tags);
}
return ResponseEntity.ok()
.headers(csvService.getHeaders(CSV_FILE_NAME))
.body(streamingResponseBody);
в шапке добавляю
produces: text\csv;
Content-Disposition: attachment; filename=%s.csv;
На стороне клиента я использую фреймворк aurelia и отправляю запрос с помощью HttpClient (fetch)
public getFraudAlertsCsv() {
this.serverProxy.fetch(`/sessions/fraud/csv)
.then(response => {
logger.debug('waiting for response');
return response.blob());
.then((blob: Blob) => this.donwnloadCsv(blob, `Fraud_Alerts_${new Date()}.csv`))
.catch( (err)=> {
this.logger.error("Failed to get appSessionId sessions csv file", err);
});
}
, несмотря на то, что в анализе сети я вижу, что мой запрос начинает получать ответ (размер увеличивается), всплывающего окна, запрашивающего загрузку файла, нет, и в журнале не выводится «ожидание ответа».
вместо этого я получаю весь загружаемый файл, который получил весь ответ (когда сервер закрывает поток).
Я хочу показать ход загрузки, как я могу это сделать?