【发布时间】:2020-07-25 09:58:44
【问题描述】:
我正在尝试在点击时播放音频,但不幸的是它无法正常工作 响应返回一个二进制文件,我确实使用了 base64_decode(responseFromServer);
从前端(Vue)我使用 axios 并将其设置为接收带有标题 Content-Type: 'application/json' 的 responseType 'blob'
我像这样将响应传递给 axios
// inside audioPlay click method
// this is inside .then(response => )
const blobUrl = window.URL.createObjectURL(new Blob([response.data], {
type: 'audio/wav',
}));
const audio = document.getElementById(`audio-${id}`);
const source = document.getElementById(`source-${id}`);
source.src = blobUrl;
audio.pause();
audio.load();
audio.oncanplaythrough;
audio.play();
还有模板
<v-btn icon @click="audioPlay(item.audio_id)">
<v-icon>mdi-play</v-icon>
</v-btn>
<audio :id="'audio-' + `${item.audio_id}`" class="d-none" controls>
<source :id="'source-'+`${item.audio_id}`" src="" type="audio/wav"/>
</audio>
但不幸的是,什么也没发生,根本没有声音。
【问题讨论】:
-
console.log(response.data)输出什么?如果它真的是一个 Blob,则无需将其包装在另一个 Blob 中。您确定收到的数据是正确的音频文件吗? -
是的,它返回了一个正确的 blob,我还有另一种方法可以将文件下载为 .wav 并且播放完全正常
-
Blob {size: 77605, type: "text/html"} size: 77605 type: "text/html" proto: Blob
标签: javascript vue.js html5-audio