我具有此功能,该功能可通过http从服务器获取blob
(以下载文件):
getBlob(data: any) {
return this.http.post("theurl", data,
{observe: 'response', responseType: 'blob'} ).
pipe(
map(response => response)
);
}
问题是服务器可能返回一个blob
,或者如果用户未获得授权(或其他应用程序错误),它将返回一个带有错误消息和错误代码的json
。
如果HTTP响应类型为blob
,我将把blob
响应存储为下载文件。如果HTTP响应类型为json
,我将获取错误代码和消息并显示给用户。
如何调整此功能以接收blob
或json
响应类型?如何获取json
响应的内容?
答案 0 :(得分:0)
嗯,这取决于服务器。但首先。此函数/方法不返回blob或json。它返回一个可观察的,因为这是角度的工作方式。当您未登录时,您的服务器应以可以在catch方法中拦截的错误代码响应。
return this.http.post(
'theurl',
data,
{observe: 'response', responseType: 'blob'}
)
.pipe(
map(response => response)
);
.catch((err) => {
// Do messaging and error handling here
return Observable.throw(err)
});
在组件中您可以执行以下操作:
this.myService.myMethod(data).subscribe((res) => {
console.log(res);
// some success logic
},
(err) => {
console.log(err);
// some errorlogic
});
您还可以尝试从HTTP调用接收的JSON中检查特定密钥,以检查其JSON是否正确。但是我不推荐这种解决方案。
答案 1 :(得分:0)
首先控制台,您将使用可引发消息的方式来了解响应。
getBlob(data: any) {
return this.http.post("theurl", data,
{observe: 'response', responseType: 'blob'} ).
pipe(
map(response => response)
);
console.log(data)
if (data['blob'] === 'true'){
alert("Authorized User")
}
else{
alert("Unauthorized User")
console.log(data['message']);
}
答案 2 :(得分:0)
这有效:
response => {
if (response.body.type == 'application/json') {
var reader = new FileReader();
reader.onloadend = function(){
const parsed: any = JSON.parse(reader.result as string);
processJson(parsed);
};
reader.readAsText(response.body);
}
else
processBlob(response.body);
}