gpt4 book ai didi

javascript - 使用 http 获取图像或字节数据

转载 作者:可可西里 更新时间:2023-11-01 01:21:29 26 4
gpt4 key购买 nike

对于 Web 应用程序,我需要使用 ajax 请求获取我的图像,因为我们的 API 上有签名 + 身份验证,所以我们无法使用简单的 <img src="myapi/example/145"/> 获取图像

由于我们使用的是 angular2,我们显然在寻找 blob 或类似的东西,但如 static_response.d.ts 中所述文件:

/**
* Not yet implemented
*/
blob(): any;

好吧,我现在不能做,我必须等待这个功能实现。

但问题是我等不及了,所以我需要一个修补程序或一些小技巧才能从响应中获取图像数据,我将能够删除我的技巧并设置 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();
} );
}

但我没有从中获取任何图像,并且记录响应数据显示一个大字符串,它是图像数据。

您有实现此目标的技巧吗?

最佳答案

没有必要扩展BrowserXhr了。 (使用 Angular 2.2.1 测试) RequestOptionsArgs现在有一个属性responseType: ResponseContentType可以设置为 ResponseContentType.Blob

使用 DomSanitizer

import {DomSanitizer} from '@angular/platform-browser';

此示例还创建了一个可以绑定(bind)到 src 的经过清理的 url <img> 的属性

this.http.get(url,  {
headers: {'Content-Type': 'image/jpg'},
responseType: ResponseContentType.Blob
})
.map(res => {
return new Blob([res._body], {
type: res.headers.get("Content-Type")
});
})
.map(blob => {
var urlCreator = window.URL;
return this.sanitizer.bypassSecurityTrustUrl(urlCreator.createObjectURL(blob));
})

关于javascript - 使用 http 获取图像或字节数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36152917/

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