我正在使用HttpInterceptor
并且我有一个 Http 服务,它调用运行 HttpClient 的 http 方法。我正在尝试获取上传进度,我在这里面临两个问题,
首先,进度事件仅被HttpInterceptor
我的服务中的任何 Http 调用方方法捕获,而不是被我的任何 Http 调用方方法捕获。看起来前者掩盖了进度报告。
其次,进度值总是从 100% 开始,并且开始递增。
我正在懒惰地加载我的模块,HttpInterceptor 在 app.module 级别注册。
如何从 http 方法中获取进度值?
我的HttpInterceptor
服务看起来像,
if (req.url.search('https') < 0) {
const headers = new HttpHeaders({
Accept: 'application/json',
Authorization: `Bearer ${this.authService.getToken()}`,
'X-XSRF-TOKEN': `${this.authService.getAntiforgeryToken()}`,
ClientTimeZoneOffest: `${new Date().getTimezoneOffset()}`,
ClientTimeZoneId: Intl.DateTimeFormat().resolvedOptions().timeZone,
ClinetLogInId: `${this.authService.getLogInId()}`,
});
const cloneReq = req.clone({ headers });
return next.handle(cloneReq).pipe(
mergeMap((ev: HttpEvent<any>) => {
if (ev.type === HttpEventType.UploadProgress) {
const percentDone = Math.round((100 * ev.loaded) / ev.total);
console.log(`File is ${percentDone}% uploaded.`);
}
this.httpResponseHandlerService.handleSuccessResponse(ev);
return Observable.of(ev);
}),
catchError(error => {
this.httpResponseHandlerService.handleErrorResponse(error, req);
return Observable.throw(error);
}),
);
} else {
return next.handle(req);
}
}
我的 Http 调用者服务,
public upload<T>(apiUrl: string, jsonData: {} = {}) {
return this.httpService.post<T>(this.baseUrl + apiUrl, jsonData, {
reportProgress: true,
});
}
我试图取得进展的方法是,
this.httpService
.upload(this.api + this.id.value, data)
.takeUntil(this.unsubscribe)
.subscribe((ev: HttpEvent<any>) => { // Nothing is happening here!
if (ev.type === HttpEventType.UploadProgress) {
const percentDone = Math.round((100 * ev.loaded) / ev.total);
console.log(`File is ${percentDone}% uploaded.`);
}
});
进步行为是,