这是vue下载文件写的部分代码
<script>
this.$axios({
method: 'get',
url: row.src //音频服务器地址
}).then(response => {
this.$message({
type: 'success',
message: '正在下载中请稍等',
duration: 1000,
});
console.log(response)
const content = response.data
const blob = new Blob([content],{type:'audio/mpeg'});
const href = URL.createObjectURL(blob);
const a = document.createElement('a');
a.setAttribute('href', href);
a.setAttribute('download', row.title);
a.click();
URL.revokeObjectURL(href);
})
</script>
能下载下来音频
可是音频无法正常打开,服务器上的音频文件都是好的并没有损坏,请问下我的代码哪里出错了
很奇怪,你为什么要用 ajax 下载二进制后下载,不直接
const a = document.createElement('a');
a.setAttribute('href', "ajax的地址");
a.setAttribute('download', "xxx.mp3");
a.click();
你这样只会出现这样的效果
我不想出现这样的效果,我思路这样的请求音频的链接,再把返回值转换成二进制,再根据他二进制对象生成新链接,再创建a标签,点击a标签
@小小咸鱼YwY: 点击下载后端处理content-type 是最简单的。
另外,如果你希望获取二进制,axios 应该多传一个参数 responseType:
this.axios.get(url,{
responseType: 'blob'
}).then(res) {
var src = window.URL.createObjectURL(res.data);
//src 就是一个可以显示图片的相对路径。因为window.URL.crateObjectURL(blob)已经进行了转换
}
@muamaker: 我的天,我脑子短路了居然忘了再请求的时候就让他给类型,我还想返回值进行解析成二进制是解析错误,谢谢,音频视频文件都要进行这样的转换的,图片文字才会直接下载
piupiupiu~
有C++吗?
这是前端js代码,不是后端