Angular 5.2 Custom HttpClient class - Невозможно изменить responseType для blob - PullRequest
0 голосов
/ 30 августа 2018

Я использую версию Angular 5.2 в своем проекте и сталкиваюсь с проблемой с изменением значения по умолчанию responseType для blob с новой функцией.

Теперь я хочу изменить responseType на blob, чтобы загрузить файл excel, но он не работает для меня.

В моем проекте я создал класс-оболочку как CustomHttpClient для выполнения вызовов Get или Post.

Класс CustomHttpClient выглядит так: -

    export interface IRequestOptions {

    headers?: HttpHeaders;
    observe?: 'body';
    params?: HttpParams;
    reportProgress?: boolean;
    responseType?: 'json';
    withCredentials?: boolean;
    body?: any;
}


/*Custom HttpClient Class for making the WebAPI calls.*/
export class CustomHttpClient {

    _defaultHeaderType = new HttpHeaders({ 'Content-Type': 'application/json' });

    // Extending the HttpClient through the Angular DI.
    public constructor(public _http: HttpClient) {

    }

  public Get<T>(endPoint: string, options?: IRequestOptions): Observable<T> {
        if (options == undefined) {
            options = <IRequestOptions>{};
            options.headers = this._defaultHeaderType
        }

        options.headers = this.injectClient(options.headers);
        return this._http.get<T>(endPoint, options);
    }

    public GetBlob<T>(endPoint: string, options?: IRequestOptions): Observable<T> {
        if (options == undefined) {
            options = <IRequestOptions>{};
            options.headers = this._defaultHeaderType
        }

        //This line is giving error
         options.responseType = 'blob';

        options.headers = this.injectClient(options.headers);
        return this._http.get<T>(endPoint, options);
    }
}

Теперь я хочу вызвать функцию GetBlob и изменить тип отклика на «blob». Но это показывает мне, что ошибка "Тип" blob "не может быть назначена типу" Json "".

Из класса обслуживания компонента я вызываю fn следующим образом: -

downloadTemplate(): Observable<any> {
    let opt = {
        headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Accept': 'application/xlsx'}),
        options: new RequestOptions({ responseType: ResponseContentType.Blob })
    }

    return this._httpObj.GetBlob(this._baseUrl + 'DownloadTemplate', opt);
}

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

У меня недавно была такая же проблема, надеюсь, что они исправят это когда-нибудь. В качестве обходного пути я использую Object.assign:

this._http.get<T>(endPoint, Object.assign(options, { responseType: 'blob' }))

таким образом вы можете обмануть проверку типа.

0 голосов
/ 30 августа 2018

Попробуйте изменить интерфейс IRequestOptions, чтобы тип ответа был строковым. Как это:

  export interface IRequestOptions {

    headers?: HttpHeaders;
    observe?: 'body';
    params?: HttpParams;
    reportProgress?: boolean;
    responseType?: string;
    withCredentials?: boolean;
    body?: any;
}
...