angular - 如何使用角度将 blob 分配给图像 src
问题描述
我正在通过返回 blob 的 http 请求获取图像,并且我想将返回的 blob 分配给图像 src。
http请求:
const options = {
headers,
responseType: 'blob' as 'json'
};
return this.httpClient.get(url, options)
组件.ts
async ngOnInit() {
this.frontImageSrc = getImage()
}
async getImage() {
const image = await this.service.imageRequest(id, "front", token).toPromise();
var imageUrl = URL.createObjectURL(image)
return imageUrl
}
组件.html
<img src={{frontImageSrc}} alt="image"/>
图像 src 没有被分配,在控制台中我可以看到以下内容。
blob:http://localhost:4200/f846a3aa-8cd3-4876-8dd3-972c9469feb2 14:00:00.664 不安全:blob:http://localhost:4200/f846a3aa-8cd3-4876-8dd3-972c9469feb2:1 获取不安全:斑点:http://localhost:4200/f846a3aa-8cd3-4876-8dd3-972c9469feb2 net::ERR_UNKNOWN_URL_SCHEME
解决方案
关于:unsafe
东西的消息意味着角度清理了您的网址,因为它认为它不安全。解决这个问题的最干净的方法是引入一个管道(尽管不是必需的):像这样:
@Pipe({ name: 'safeResourceUrl' })
export class SafeUrlPipe implements PipeTransform {
constructor(private readonly sanitizer: DomSanitizer) {}
public transform(url: string): SafeResourceUrl {
return this.sanitizer.bypassSecurityTrustResourceUrl(url);
}
}
然后在您的组件中,您可以执行以下操作:
组件.html
<img [src]="frontImageSrc | safeResourceUrl" alt="image"/>
组件.ts
async ngOnInit() {
this.frontImageSrc = getImage()
}
async getImage() {
const image = await this.service.imageRequest(id, "front", token).toPromise();
var imageUrl = URL.createObjectURL(image)
return imageUrl
}
ngOnDestroy() {
URL.revokeObjectURL(this.imageUrl)
}
当然,您可以ngOnInit
改为绕过,但使用管道更清洁。此外,由于 url 是异步创建的,因此在模板中进行空检查可能是有意义的。
推荐阅读
- ios - 将函数参数传递给 Swift 中的选择器
- c++ - 如何在 Eclipse 中为 C++ 启用自动代码建议?
- dialogflow-es - 在 Dialogflow 中,如何从一个单词中提取两个不同实体的值?
- java - 有错误:java:包 com.fasterxml.jackson.annotation 不存在
- python - 使用 node exec 访问 python 文件中的函数
- android - 地方历史没有历史,我不知道发生了什么
- rasa-nlu - Rasa 中的实体映射
- r - 用于更改散点图中数据颜色属性的下拉菜单(Plotly R)
- json - 有没有办法获取 JSON 值中特定元素的路径?
- java - Auth0 - 验证 JWT