我正在开发一个 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);
in the if
向我展示的是这个
Blob(763750) {size: 763750, type: "text/xml"}
所以它没有做任何事情并且在 HTML 中
<img [src]="imageToShow " alt="" class="img">
那么出了什么问题