Угловое событие прогресса HttpRequest вызывается в отладочной сборке, но не работает в производственной сборке - PullRequest
0 голосов
/ 12 мая 2019

У меня есть следующий сервис Angular для загрузки файлов в Amazon S3 с использованием предварительно заданного URL:

    import { Injectable } from "@angular/core";
    import { HttpClient, HttpRequest, HttpHeaders, HttpEvent, HttpEventType, HttpErrorResponse, HttpParams } from "@angular/common/http";
    import { map, tap, last } from 'rxjs/operators';

    @Injectable()
    export class S3FileUploadService {
      constructor(private _http: HttpClient) {
      }

      upload(url: string, file: File | Blob, progress: (percent: number) => void, result: (msg: StateMessage) => void) {
        const req = new HttpRequest('PUT', url, file, {
          headers: new HttpHeaders().set("Content-Type", "binary/octet-stream"),
          reportProgress: true,
        });

        this._http.request(req).pipe(
          map(event => this._getProgress(event)),
          tap(value => progress(value)),
          last()
        ).subscribe(() => {
          result({ err: false, msg: "Uploaded" });
        }, (err) => {
          result({ err: true, msg: this._errorMsg(err, "Not uploaded") });
        });
      }

      private _getProgress(event: HttpEvent<any>) {
        switch (event.type) {
          case HttpEventType.Sent:
            return 0;
          case HttpEventType.UploadProgress:
            return Math.round(10000 * event.loaded / event.total) / 100;
          case HttpEventType.Response:
            return 100;
        }
      }
    }

Сервис отлично работает в среде разработки.Однако в производстве по какой-то причине событие прогресса не запускается (обновление происходит, когда загрузка полностью завершена).Я также пытался добавить следующие параметры в объект HttpRequest в соответствии с некоторыми примерами с похожими проблемами через Интернет, но похоже, что это устаревшая вещь, и она ни на что не влияет:

    const params = new HttpParams().set("observe", "events");

Что можетпроблема будет вызвана?Может ли это происходить не из Angular build, а из S3, не возвращающего прогресс?

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