У меня есть вызов API, который возвращает документ типа: content-type
image / png
Изображение отправляется обратно, но URL-адрес отсутствует, оно просто отправляет обратно весь объект изображения. Если API вызывается непосредственно в браузере, он просто показывает изображение напрямую.
Я хочу иметь возможность иметь службу, которая получает это изображение и отображает его в компоненте.
image-data.ts
import { Observable } from 'rxjs';
export interface ImageInfo {
image: Image
}
export abstract class ImageData {
abstract getImageData(): Observable<ImageInfo>;
}
image-data-service.ts
import { Injectable } from '@angular/core';
import { of as observableOf, Observable } from 'rxjs';
import { ImageInfo, ImageData } from '../data/image-data';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { throwError } from 'rxjs';
import { retry, catchError } from 'rxjs/operators';
@Injectable()
export class ImageDataService extends ImageData {
baseurl = 'https://website.com/image';
httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'image/png'
})
}
constructor(private http: HttpClient) {
super();
}
private imageInfoData: ImageInfo =
{
image: Image
}
getImageData(): Observable<ImageInfo> {
return this.http.get<ImageInfo>(this.baseurl)
.pipe(
retry(1),
catchError(this.errorHandl)
)
}
// Error handling
errorHandl(error) {
let errorMessage = '';
if(error.error instanceof ErrorEvent) {
// Get client-side error
errorMessage = error.error.message;
} else {
// Get server-side error
errorMessage = `Error Code: ${error.status}\nMessage: ${error.message}`;
}
console.log(errorMessage);
return throwError(errorMessage);
}
}
в компоненте для отображения изображения Я пытаюсь:
this.imageDataService.getImageData()
.pipe(takeWhile(() => this.alive))
.subscribe((ImageData) => {
this.imageData = imageData;
});
Затем в компонентах html Я хочу отобразить изображение:
<img [src]="imageData">
// Not sure if I should set the src because I get back the entire image not the url