angular - 显示已在 Angular 5 中作为 Blob 对象接收的图像
问题描述
我正在开发一个 MEAN Stack 应用程序,我想做的是显示一个存储在数据库中的图像,这样后端就可以工作,但我真正的问题是在前端,Angular
所以我这样做了
首先从后端接收图像,我做了一个服务来做到这一点
// Function to get user's profile image
getProfileImage(){
let httpHeaders = new HttpHeaders()
.set('authorization', this.authToken);
return this._http.get(this.domain + '/authentication/getProfileImage',{headers :httpHeaders,
responseType: "blob"});
}
将图像作为 Blob 接收。
其次是在component.ts
我试图将 Blob 转换为文件
imageToShow: any;
getImageFromService() {
this.authService.getProfileImage().subscribe(data => {
this.createImageFromBlob(data);
console.log(data);
}, error => {
console.log(error);
});
}
这是从服务获取图像并使用console.log(data);
这是我得到的
Blob(763750) {size: 763750, type: "text/xml"}
并且它的大小与数据库中的文件长度相同,因此可以正常工作。
现在将 Blob 转换为图像的第二种方法
createImageFromBlob(image: Blob) {
let reader = new FileReader();
reader.addEventListener("load", () => {
this.imageToShow = reader.result;
console.log(this.imageToShow);
}, false);
if (image) {
reader.readAsDataURL(image);
}
}
console.log(this.imageToShow);
它所显示的是这个很data:text/xml;base64,/9j/4RE6RXhpZgAATU0A
长string
的那个base64
,所以我在里面加了一个console.log(image);
,if
告诉我的是这个
Blob(763750) {size: 763750, type: "text/xml"}
所以它没有做任何事情并且在 HTML 中
<img [src]="imageToShow " alt="" class="img">
那怎么了
解决方案
首先尝试将 img 标签绑定到一个变量,该变量将成为您图片的 url。例如
<img [src]=imageUrl>
然后你需要使用 DomSanitizer
import { DomSanitizer } from '@angular/platform-browser';
constructor(private sanitizer:DomSanitizer)
要绕过 unsafeUrl 的SecurityTrust 并在您的组件中检索图像时,您应该像这样为图像创建一个 url
getImageFromService() {
this.authService.getProfileImage().subscribe(data => {
unsafeImageUrl = URL.createObjectURL(data);
imageUrl = this.sanitizer.bypassSecurityTrustUrl(unsafeImageUrl);
}, error => {
console.log(error);
});
}
这将创建您可以在绑定中使用的图像的临时 url
推荐阅读
- html - 客户端和服务器站点上的文本区域内容字符数不同
- c# - 如何在加载 ItemCollection 列表时执行搜索(错误:集合已修改;枚举操作可能无法执行。)
- django - 如何向 oscar 仪表板添加新字段
- node.js - 在 node.js 中创建文件,使用不属于受支持的标准节点编码 [ascii/base64/latin1/...] 的编码 (CP437 / IBM)
- c# - Unity 在游戏中显示后期构建数据
- python-3.x - 调用python脚本时如何捕获用户命令?
- php - 从 WooCommerce 3 中的订单项中获取一组特定数据
- gitlab - 如果指定存储库的标签小于指定数量,则阻止管道的进展
- python - 将 panda df 移至 teradata 表:[HY000] [Teradata][ODBC Teradata Driver][Teradata Database] 时间戳无效
- javascript - 使用 Vue 在表的 td 内显示 Div 不是反应性的