解析 http 时出现 Http 失败...下载 pdf 文件时

edm*_*ond 4 httpclient angular

我是 angular 的新手,我一直在努力弄清楚如何下载一个文件,在我的例子中是一个 pdf 文件。这是我得到的错误:

Http failure during parsing for https://url...
Run Code Online (Sandbox Code Playgroud)

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

SyntaxError: Unexpected token % in JSON at position 0 at JSON.parse
Run Code Online (Sandbox Code Playgroud)

其实我正在下载一个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))
  );
Run Code Online (Sandbox Code Playgroud)

} 如何

aba*_*nny 9

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

这是来自angular网站的文档:

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>
Run Code Online (Sandbox Code Playgroud)

响应类型:

除了配置请求参数(例如传出标头和/或正文)之外,选项哈希还指定了有关请求的两个关键信息: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))
      );
Run Code Online (Sandbox Code Playgroud)

更多信息:

http客户端

文件

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