解析http时的Http失败...在下载pdf文件时

时间:2018-04-25 09:32:11

标签: angular httpclient

我是角色的新手,我一直在努力弄清楚如何下载文件,在我的情况下是一个pdf文件。 这是我得到的错误:

Http failure during parsing for https://url...

在浏览器的调试控制台中,这也是一个错误:

SyntaxError: Unexpected token % in JSON at position 0 at JSON.parse

其实我正在下载pdf文件。这是我的http调用的样子:

  protected get<T>(url: string, params: any, defaultResult: T): Observable<T> {
    return this.httpClient.get<T>(url, {
    headers: myHeader,
    params: params
})
  .pipe(catchError(this.handleError(defaultResult))
  );

} 怎么

2 个答案:

答案 0 :(得分:4)

由于您传回的是一大块数据而不是JSON,但没有让httpclient知道如何解析它,因此angular尝试将响应解析为JSON,这是默认路径。

以下是角网站的文档:

request(first: string | HttpRequest<any>, url?: string, options: {
    body?: any;
    headers?: HttpHeaders | {
        [header: string]: string | string[];
    };
    observe?: HttpObserve;
    params?: HttpParams | {
        [param: string]: string | string[];
    };
    reportProgress?: boolean;
    responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';
    withCredentials?: boolean;
} = {}): Observable<any>

<强>的responseType:

除了配置请求参数(如传出标头和/或正文)之外,options hash还指定了有关请求的两个关键信息:responseType和要观察的内容。 responseType值确定如何解析成功的响应主体。如果responseType是默认的json,则结果对象的类型接口可以作为类型参数传递给request()。

所以在你的情况下试试:

    protected get<T>(url: string, params: any, defaultResult: T): Observable<any> {
        return this.httpClient.get(url, {
        headers: myHeader,
        params: params,
        responseType: 'blob'
    })
      .pipe(catchError(this.handleError(defaultResult))
      );

更多信息:

httpclient

documentation

类似的问题 Angular HttpClient "Http failure during parsing"

答案 1 :(得分:0)

为我工作谢谢 对于组件,请检查以下

downloadFile(caseID) {
    console.log(caseID);
    this.mediaService.downloadFile(caseID).subscribe(
        (downloaded) => {
        console.log('File is Downloaded', downloaded);
        var url = window.URL.createObjectURL(downloaded);
        window.open(url);
    });
}