- 需求的场景描述(希望解决的问题)
在播放需要鉴权的音频文件时,开发者工具中,可以正常播放。但是在手机中微信小程序播放时,就报错了,原因是阿里云OSS鉴权验证失败,导致返回403错误;
在手机中,微信小程序的createInnerAudioContext可以正常播放以上出现403错误的已鉴权URL,但是getBackgroundAudioManager播放音频失败,错误:
|
- 希望提供的能力
希望可以解决这个问题,毕竟createInnerAudioContext是可以播放的,而且开发者工具中的getBackgroundAudioManager也是可以播放的。
另外,希望开发者工具中的模拟器,能和微信小程序的环境完全一致;
谢谢
在优才全栈工程师,微信群里弘哥的帮助下,终于解决了这个问题;
原因:
getBackgroundAudioManager这个API,小程序中,请求音频文件的时候,加了头信息:
"Content-Type" : "application/octet-stream" |
服务器在鉴权的时候,是没有加入任何头信息的,因此就造成头信息不一致,导致阿里云OSS鉴权失败,无法访问资源;
服务器代码做如下调整后,可以正常访问资源,鉴权可以通过验证:
$client = new OssClient(env( 'OSS_ACCESS_KEY_ID' ), env( 'OSS_ACCESS_KEY_SECRET' ), env( 'OSS_FREE_ENDPOINT' )); $result = $client ->signUrl( $this ->bucket, $object , $timeout , 'GET' , [ 'Content-Type' => 'application/octet-stream' ]); |
主要就是在鉴权方法的最后一个参数中,设置了getBackgroundAudioManager这个API访问资源时,增加的Header头信息;
注:以上为测试代码,请根据项目实际情况进行调整;