Как скачать CSV-файл с сервера, используя поток - PullRequest
0 голосов
/ 07 января 2019

Я пытаюсь загрузить огромный 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);
                });
        }

, несмотря на то, что в анализе сети я вижу, что мой запрос начинает получать ответ (размер увеличивается), всплывающего окна, запрашивающего загрузку файла, нет, и в журнале не выводится «ожидание ответа». вместо этого я получаю весь загружаемый файл, который получил весь ответ (когда сервер закрывает поток).

Я хочу показать ход загрузки, как я могу это сделать?

1 Ответ

0 голосов
/ 09 января 2019

Я думаю, что fetch пока не поддерживает API прогресса, поэтому вы можете использовать традиционный XHR и использовать onprogress или событие progress:

xhr.onprogress = function updateProgress(oEvent) {
  if (oEvent.lengthComputable) {
    var percentComplete = oEvent.loaded / oEvent.total * 100;
    // ...
  } else {
    // Unable to compute progress information since the total size is unknown
  }
}

Примечание: пример кода взят со страницы MDN https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest#Monitoring_progress

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...