在Angular中解析期间接收到HTTP失败。目标是从api响应中下载csv文件
控制器:
downloadFile(data) {
const blob = new Blob([data], { type: 'text/csv' });
const url = window.URL.createObjectURL(blob);
window.open(url);
}
getFileDownload(): void {
this.iportalUploadService.getFileDownload(this.fileName).subscribe(data => {
debugger;
this.fileDownload = data;
this.downloadFile(data);
});
}
服务:
private fileDownloadUrl = 'file-transfer/validationErrorsCSV';
formHtppOptions(params): any {
const httpOptions = {
headers: { 'Application-Token': this.getToken()},
params: params,
};
return httpOptions;
}
getFileDownload(fileName): Observable<Object> {
const baseUrl = this.getBaseUrl();
return this.http.get<Object>(baseUrl + this.fileDownloadUrl, this.formHtppOptions({fileName: fileName}));
}
以下是我收到的控制台错误 console error
响应格式照片 Response photo
答案 0 :(得分:0)
您收到此错误,因为您的响应不是JSON格式。您正在尝试将其转换为对象,并且CSV文本无法解析为正确的json对象。这是您可能想要做的:
getFileDownload(fileName): Observable<any> {
const baseUrl = this.getBaseUrl();
return this.http.get(baseUrl + this.fileDownloadUrl, this.formHtppOptions({fileName: fileName})).pipe(map((data:any) => this.converter.ToJson(data)));
}
通常,我有一个“转换器”服务来执行这种解析。您可以使用papa parse,也可以通过循环响应来解析自己。
更新:以下是手动解析响应的示例:http://blog.sodhanalibrary.com/2016/10/read-csv-data-using-angular-2.html
看看上面的博客文章。
答案 1 :(得分:0)
我通过在formhttpOtions中添加responseType:'text'解决了此问题。