js 下载音频的实现方式

文章介绍了如何使用axios和fetchAPI从腾讯云URL下载音频文件,通过转化成Blob对象并设置下载属性,避免了新页面播放的跳转。同时提到了处理txt和word文档下载的方法以及安全注意事项。
摘要由CSDN通过智能技术生成

通常下载文件我们会用到 <a> 标签,但是 a 标签在下载音频的时候会跳转到一个新页面进行播放,不会直接下载,这与我们的需求南辕北辙。这里我通过查询资料,找到了两种方式(原理想通,也可以理解为一种):将文件转化为blob对象的二进制数据流下载。

前提:这里我的音频文件是上传到腾讯云的,这里基于 腾讯云 的url进行下载。

axios 方式下载

 axios({
          method: 'get',
          url: row.audioUrl,
          // 必须显式指明响应类型是一个Blob对象,这样生成二进制的数据,才能通过window.URL.createObjectURL进行创建成功
          responseType: 'blob',
      }).then((res) => {
          // 将lob对象转换为域名结合式的url
          let blobUrl = window.URL.createObjectURL(res.data)
          let link = document.createElement('a')
          document.body.appendChild(link)
          link.style.display = 'none'
          link.href = blobUrl
          // 设置a标签的下载属性,设置文件名及格式,后缀名最好让后端在数据格式中返回
          link.download = row.theme ? row.theme + '.wav' : '会议录音.wav';
          // 自触发click事件
          link.click()
          document.body.removeChild(link)
          window.URL.revokeObjectURL(blobUrl);
      })

fetch

 fetch(row.audioUrl).then(res => res.blob()).then(blob => {
        const a = document.createElement('a');
        document.body.appendChild(a)
        a.style.display = 'none'
        // 使用获取到的blob对象创建的url
        const url = window.URL.createObjectURL(blob);
        a.href = url;
        // 指定下载的文件名
        a.download = row.theme ? row.theme + '.wav' : '会议录音.wav';
        a.click();
        document.body.removeChild(a)
        // 移除blob对象的url
        window.URL.revokeObjectURL(url);
      });

补充:

如果是 txt \ word 文档等文件,可以通过 a 标签的方式进行下载。

const downloadFileA = document.createElement('a')
document.body.append(downloadFileA)
downloadFileA.href=`https://xxx`
downloadFileA.download = '下载文件.csv'
// 超链接 target="_blank" 要增加 rel="noopener noreferrer" 来堵住钓鱼安全漏洞。如果你在链接上使用 target="_blank"属性,并且不加上rel="noopener"属性,那么你就让用户暴露在一个非常简单的钓鱼攻击之下。(摘要)
downloadFileA.rel = 'noopener noreferrer'
downloadFileA.click()
document.body.removeChild(downloadFileA)
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码搬运媛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值