所以我正在使用 Angular 7 ,并且我已经创建了一个使用api消费的应用程序,我确实创建了一个http-interceptor,并且我所有的基本功能都可以正常工作,http拦截器在技术上添加了一个每个请求上的令牌。 所以问题是当我添加HowlerJs时出现401错误,我已经调查了这个问题,而我找不到解决方案。 这是我的代码:
public play_audio_file(id: string) {
this.httpClient.get(`${this.Url}/${id}/audiofile`, {
responseType: "blob",
headers: {
'Accept': 'audio/*',
'Authorization': `Bearer ${this.token}`
}
})
.subscribe(blob => {
var sound = new Howl({
src: `${this.Url}/${id}/audiofile`,
format: ['wav'],
});
sound.play();
console.log(sound)
});
}
请注意,对于我来说,使用咆哮并不是必须的,所有尝试要做的就是播放音频,即使使用HTML音频播放器, 任何帮助将不胜感激
答案 0 :(得分:0)
所以,我错了...一路走错了,我找到了解决方案, 我确实得到了401,因为我从httpclient和howlerJS进行了2次调用,其中一个来自httpclient具有token,但是第二个没有token,因此导致错误-401- 所以我将代码更改为以下内容:
public play_audio_file(id: string) {
var xhr = new XMLHttpRequest();
var url = `${this.Url}/${id}/audiofile`;
xhr.open('GET', encodeURI(url), true);
xhr.setRequestHeader('Authorization', `Bearer ${this.token`);
xhr.responseType = 'blob';
xhr.onload = function (evt) {
var blob = new Blob([xhr.response], { type: 'audio/*' });
var objectUrl = URL.createObjectURL(blob);
var sound = new Howl({
src: objectUrl,
format: ['wav'],
});
sound.play();
//OR with web audio API
// var audio = new Audio();
// audio.src = objectUrl;
// audio.onload = function (evt) {
// URL.revokeObjectURL(objectUrl);
// };
// audio.play();
};
xhr.send();
}
或者使用HttpClient更好:
public play_audio_file(id: string) {
this.httpClient.get(`${this.Url}/${id}/audiofile`, { responseType: "blob", headers: { 'Accept': 'audio/*' } })
.subscribe(blob => {
var objectUrl = URL.createObjectURL(blob);
var sound = new Howl({
src: objectUrl,
format: ['wav'],
});
sound.play();
//OR with web audio API
// var audio = new Audio();
// audio.src = objectUrl;
// audio.onload = function (evt) {
// URL.revokeObjectURL(objectUrl);
// };
// audio.play();
});
}