Как отслеживать ход загрузки тела ответа http в angular? - PullRequest
0 голосов
/ 15 февраля 2020

Поскольку я хочу отслеживать загруженный прогресс в angular http Requset, я установил:

this._httpClient.post(`${this._crsUploadApiUrl}`, crsFileInput, {
reportProgress:true,
observe:'events'
    }).pipe().....

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

private reportProgress(event: HttpEvent<any>) {
switch (event.type) {
case HttpEventType.UploadProgress:
              ...
break;
case HttpEventType.DownloadProgress:
            ...
break;
case HttpEventType.Response:
...
break;
default:
break;
        }
    }

Таким образом, я могу получить event.loaded и event.total для отслеживания процесса загрузки / выгрузки (в моем случае event.loaded / event.total, это довольно много времени). Он отлично работает в процессе загрузки, но в процессе загрузки. , он не смог получить событие, общее количество которого представляет размер содержимого ответа.

Кто-то [https://github.com/angular/angular/issues/1889] [1] сказал, что я должен добавить заголовок «content-length» msgstr "так что это может работать, но даже если я добавлю его в свой response.content.header, это не сработает. Я могу получить длину после загрузки тела, но не среднее время загрузки.

Вот мой Asp. net Core 2.2 API-ответ:

var responseJson = JsonConvert.SerializeObject(surfaceDtos);
            var response = new HttpResponseMessage();
            response.StatusCode = HttpStatusCode.OK;
            response.Content =  new ObjectContent<List<SurfaceDTO>>(surfaceDtos, new JsonMediaTypeFormatter());
            //new StringContent(responseJson, System.Text.Encoding.UTF8, "application/json");
            response.Content.Headers.ContentLength = responseJson.Length;
            response.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
            response.Content.Headers.Add(@"Access-Control-Allow-Headers", "Content-Length");
            response.Content.Headers.Add(@"Access-Control-Expose-Headers", "Content-Length");
            return new ResponseMessageResult(response);

Dev Env: Angular 8.x, Asp. Net Core 2.2

Так есть ли решение или обходной путь, по которому я мог бы отслеживать объем содержимого тела ответа в angular? Thx!

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