У меня есть приложение Angular, где я просто хочу скачать файл.
До сих пор это был мой код:
this.fileNavigationService.downloadFile(element).subscribe(result => {
this.generateDownload(result);
});
И мой сервис:
downloadFile(file: FileElement) {
return this.http.get(this.apiUrl + '/downloadFile', { params: file.name, responseType: 'blob' });
}
Теперь я хотел показать прогресс при загрузке файла. Посмотрев в Интернете, я наткнулся на что-то весьма полезное. Мой сервис теперь выглядит так:
downloadFile(file: FileElement) {
const req = new HttpRequest('GET', '/downloadFile?path=' + file.name, {
reportProgress: true,
});
return this.http.request(req).subscribe(event => {
if (event.type === HttpEventType.DownloadProgress) {
const percentDone = Math.round(100 * event.loaded / event.total);
console.log(`File is ${percentDone}% downloaded.`);
} else if (event instanceof HttpResponse) {
console.log('File is completely downloaded!');
}
});
}
Я ясно вижу в своей консоли прогресс, однако теперь у меня есть 2 проблемы:
- Мой код никогда не переходит в последний
if
, даже если загрузка достигает 100%
- Код в моем компоненте явно не работает по методу подписки
Свойство «подписка» не существует для типа «Подписка».
Но я не могу найти способ заставить это работать, чтобы я мог получить прогрессию и мой файл результатов.
У вас есть идеи или примеры, чтобы помочь мне в этом? Спасибо.