Я делюсь своим кодом из моего проекта. В этом примере
У меня есть API, который вызывает его с customerNumber
, который возвращает мне данные типа blob
. И я возвращаю эти данные своему компоненту из сервиса. Со стороны компонентов я беру эти данные как BLOB-объекты и преобразую их в тип Image
с помощью функции this.createImageFromBlob
. И наконец, я показываю это изображение на стороне шаблона, используя переменную imageToShow.photo
в теге <img [src]="imageToShow.photo">
.
My service.ts side,
getCustomerImages(customerNumber: number, type: string): Observable<File> {
let result: Observable<any> = this.http
.get(`${this.apiBaseUrl}csbins/Customer/${customerNumber}/images`, { responseType: "blob" });
return result;
}
Моя сторона component.ts,
getCustomerImages() {
this.isImageLoading = true;
this.getCustomerImagesSubscription = this.getCustomerService.getCustomerImages(this.refNo).subscribe(
data => {
this.createImageFromBlob(data);
this.isImageLoading = false;
},
error => {
this.isImageLoading = false;
});
}
и конвертируйте blob в изображение здесь, в вашем компоненте,
createImageFromBlob(image: Blob) {
let reader = new FileReader();
reader.addEventListener("load",
() => {
this.imageToShow.photo = reader.result;
},
false);
if (image) {
if (image.type !== "application/pdf")
reader.readAsDataURL(image);
}
}
и моя сторона template.html,
<ng-template [ngIf]="imageTypeShow">
<ng-template [ngIf]="imageToShow.photo">
<img [src]="imageToShow.photo" class="img-thumbnail" *ngIf="!isImageLoading;">
</ng-template>
</ng-template>
Не стесняйтесь спрашивать, не понимаете ли вы какой-либо смысл.