angular - Angular 8/9 为什么经过身份验证和管道图像 url 在 Typescript 中返回空图像 blob
问题描述
我正在尝试在来自远程服务器的用户列表旁边列出图像。服务器是安全的,所以我必须在每个请求中发送一个 Jwt 令牌。我有一个拦截器,它为每个请求添加一个 jwt 令牌。因此,我在管道中使用了拦截器来使用 [src] 标签对每个图像进行身份验证,如下所示。
<img [src]="user.photo | authenticate | async" />
没有错误,但每个图像只显示一个小边框,表明该图像是空的。
这是模板中管道的用法:
<div class="media">
<img class="img-fluid circle" [src]="user.photo | authenticate | async" />
</div>
这是我的打字稿管道:
import { HttpClient, HttpHeaders } from '@angular/common/http';
import 'rxjs/add/operator/map';
import { AuthService } from '../services/auth.service';
@Pipe({
name: 'authenticate'
})
export class AuthImagePipe implements PipeTransform {
constructor(
private http: HttpClient,
private authService: AuthService, // our service that provides us with the authorization token
) {}
async transform(src: string): Promise<string> {
console.log(src);
const token = this.authService.currentUserValue.token.accessToken;
const headers = new HttpHeaders({'Authorization': 'Bearer ' + token});
const imageBlob = await this.http.get(src, {headers, responseType: 'blob'}).toPromise();
const reader = new FileReader();
return new Promise((resolve, reject) => {
reader.onloadend = () => resolve(reader.result as string);
reader.readAsDataURL(imageBlob);
});
}
}
解决方案
已解决:有问题的项目是 css 类标签class="img-fluid circle"
。它赋予图像尺寸 0px x 0px。所以图像 blob 一直在正确加载。
结案!
推荐阅读
- node.js - 如何使用 fs.writeFile 将图像正确保存到文件系统?
- c++ - C++ 在循环内使用 getline() 读取 CSV 文件
- python - 列表中浮点数的总和相差 0.00000001
- swift - 如何在插入行之前向 UITableViewCells 添加标签?
- shell - 如何提取不在注释中的模式的值(另一种模式)
- xamarin - 使用 Xamarin 首选项在投射上发生冲突
- javascript - 将 JSON 反序列化为 JavaScript 对象(数据表)
- java - Java 方法调用问题,从新的 .java 类返回主菜单,可能存在数组问题
- spring - Webflux JWT 授权无法正常工作
- reactjs - 尝试启动 microsoft/vscode-react-sample 时如何解决此错误