有没有办法在接收响应后更改post方法(角度5)的响应类型? 问题:当响应没问题时,我需要responseType为blob。如果不是 - 我需要json responseType。 我做了一些谷歌搜索,但无法找到完全适合我的情况的答案。 代码示例(简要):
// just simple method in service
export class MyService {
constructor(private http: HttpClient) {}
doSomething(data, fileName): Observable<any> {
return this.http.post('url', data, {
headers: new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded'),
params: new HttpParams().set('fileName', fileName),
responseType: 'blob'
})
}
}
// just classic method in component
export class MyComponent {
constructor(private myService: MyService) {}
this.myService.doSomething(this.data, this.file).subscribe(() => {
// here doing something useful
}, (error: HttpErrorResponse) => {
// handling the error
})
}
所以,还有一次,在这种情况下,每当我得到blob的响应时,如果一切都很好就很好。但如果我有错误,我需要回应在json。反之亦然。 如何在两种情况下设置正确的responseType?提前致谢。
我相信你可以这样做:
this.http.post('url', data,
{
observe: 'response',
responseType: 'arraybuffer' ,
headers: new HttpHeaders().set('Accept', 'application/octet-stream; application/json'),
params: new HttpParams().set('fileName', '')
})
.pipe(
map(res => {
if (res.ok) {
const blob:Blob = new Blob([res.body], {type: 'application/octet-stream'});
return blob;
}
else {
var decodedString = String.fromCharCode.apply(null, new Uint8Array(res.body));
var obj = JSON.parse(decodedString);
return obj;
}
})
);