gpt4 book ai didi

angular - 处理 blob http 调用中的 json 错误消息

转载 作者:行者123 更新时间:2023-12-03 19:37:56 24 4
gpt4 key购买 nike

我们有 http 调用,如:

this.http.get(`${environment.baseUrl}/api/v.1/reports/...`, 
{ responseType: ResponseContentType.Blob })

它返回 blob pdf,我们进一步通过 FileSaver 保存。

问题是如果服务器返回带有一些 application/json 的 4XX 响应和正文中的消息。在这种情况下,我们找不到如何访问它的方法 responseType必须在请求之前设置,以后不能更改。

有什么优雅的解决方案吗?

最佳答案

我做了一些测试,这就是我到目前为止所做的。它工作正常,一切如预期。但我不会接受它作为答案,而是留出一段时间供社区审查。如果有人发现这种方法有问题,请在评论中指出。

ErrorMessage 的格式很简单:
{ message:string }
服务:

getPDF() {
return this.http.get(`${environment.baseUrl}/api/v.1/reports/...`, { responseType: ResponseContentType.Blob })
.map((res) => {
return {
blob: new Blob([res.blob()], { type: 'application/pdf' }), filename: this.parseFilename(res)
}
})
.catch((res) => {
let fileAsTextObservable = new Observable<string>(observer => {
const reader = new FileReader();
reader.onload = (e) => {
let responseText = (<any>e.target).result;

observer.next(responseText);
observer.complete();
}
const errMsg = reader.readAsText(res.blob(), 'utf-8');
});

return fileAsTextObservable
.switchMap(errMsgJsonAsText => {
return Observable.throw(JSON.parse(errMsgJsonAsText));
})
});
}

关于angular - 处理 blob http 调用中的 json 错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45477757/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com