Как получить промежуточный ответ в Angular HTTP - ArrayBuffer - PullRequest
0 голосов
/ 25 января 2019

У меня внутреннее приложение Electron. Я загружаю приложение Angular. Я загружаю байтовый массив (т. Е. ArrayBuffer) через вызов API и передаю эти данные методу, который я подключаю через Electron.remote.require ('./ file-service'), чтобы создать файл в локальной системе. файловая система.

Если пользователь меняет маршрут, всплывающее окно предложит получить подтверждение навигации. Если пользователь нажимает «ОК» и между ними находится http-запрос, мне нужно сохранить полученные байты.

Пример углового кода:

declare var electron: any;
const { createDataFile } = electron.remote.require('./file-service')

const payLoad = new FormData();
const httpOptions =  {
      headers: new HttpHeaders(),
      reportProgress: true,
    };

const req = new HttpRequest('GET', 'http://localhost:8080/getData', payLoad, {...httpOptions, responseType: 'arraybuffer'});
this.http.request<ArrayBuffer>(req).subscribe((event: HttpEvent<ArrayBuffer>) => {

    switch (event.type) {
        case HttpEventType.DownloadProgress:
            // This method will manipulate and show the progress bar in the UI
            this.updateProgress(event.loaded);
        break;
        case HttpEventType.Response:
            createDataFile(event.body)
        break;
    }

});

Я пытаюсь сохранить данные. Если размер массива буфера составляет 25 МБ, и я получил 12 МБ, и я пытаюсь уйти, в этот момент мне нужно сохранить эти 12 МБ. Пожалуйста, помогите мне, как получить промежуточный ответ.

1 Ответ

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

Вы упомянули, что можете управлять внутренним кодом, написанным на Java. Я не уверен, что вы можете сделать responseType текстом и отправить закодированный байтовый массив в виде строки. Но если вы можете, то вы можете получить промежуточные данные в partText из полученного события, чтобы декодировать и сохранить их.

     interface HttpDownloadProgressEvent extends HttpProgressEvent {
      type: HttpEventType.DownloadProgress
      partialText?: string  //The partial response body as downloaded so far.Only present if the responseType was text.

      // inherited from common/http/HttpProgressEvent
      type: HttpEventType.DownloadProgress | HttpEventType.UploadProgress
      loaded: number
      total?: number
    }

    switch (event.type) {
        case HttpEventType.DownloadProgress:
            // This method will manipulate and show the progress bar in the UI
            this.updateProgress(event.loaded);
//////////////////////////////////////////////////////////////////////////////
            store event.partialText; 
/////////////////////////////////////////////////////////////////
        break;
        case HttpEventType.Response:
            createDataFile(event.body)
        break;
    }

Не забудьте запрос Прогресс

const req = new HttpRequest('POST', 'upload/file', file, {
  requestProgress: true
});
...