对于 Web 应用程序,我需要使用 ajax 请求获取图像,因为我们的 API 上有签名 + 身份验证,因此我们无法使用简单的获取图像<img src="myapi/example/145"/>
由于我们使用的是 angular2,我们显然在寻找 blob 或类似的东西,但正如static_response.d.ts
文件中所述:
/**
* Not yet implemented
*/
blob(): any;
所以好吧,我现在做不到,我必须等待这个功能被实现。
但问题是我等不及了,所以我需要一个修补程序或一些小技巧才能从响应中获取图像数据,我将能够删除我的 hack 并将blob()
方法调用设置为在实现时良好。
我试过这个:
export class AppComponent {
constructor(private api:ApiService, private logger:Logger){}
title = 'Tests api';
src='http://placekitten.com/500/200'; //this is src attribute of my test image
onClick(){ //Called when I click on "test" button
this.api.test().then(res => {
console.log(res._body);
var blob = new Blob([new Uint8Array(res._body)],{
type: res.headers.get("Content-Type")
});
var urlCreator = window.URL;
this.src = urlCreator.createObjectURL(blob);
});
}
}
用ApiService.test()
方法:
test():Promise<any> {
return this.http.get(this._baseUrl + "myapi/example/145", this.getOptions())
//getOptions() is just creating three custom headers for
//authentication and CSRF protection using signature
.toPromise()
.then(res => {
this.logger.debug(res);
if(res.headers.get("Content-Type").startsWith("image/")){
return res;
}
return res.json();
})
.catch(res => {
this.logger.error(res);
return res.json();
} );
}
但是我没有从中得到任何图像,并且记录响应数据会显示一个大字符串,即图像数据。
你有办法实现这一点吗?