我是角色的新手,我一直在努力弄清楚如何下载文件,在我的情况下是一个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))
);
} 怎么
答案 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))
);
更多信息:
答案 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);
});
}