js 下载音频的实现方式

embedded/2024/9/25 21:26:48/

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

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

axios 方式下载

 axios({method: 'get',url: row.audioUrl,// 必须显式指明响应类型是一个Blob对象,这样生成二进制的数据,才能通过window.URL.createObjectURL进行创建成功responseType: 'blob',}).then((res) => {// 将lob对象转换为域名结合式的urllet 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对象创建的urlconst url = window.URL.createObjectURL(blob);a.href = url;// 指定下载的文件名a.download = row.theme ? row.theme + '.wav' : '会议录音.wav';a.click();document.body.removeChild(a)// 移除blob对象的urlwindow.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)

http://www.ppmy.cn/embedded/21338.html

相关文章

智能手机加速度计和陀螺仪进行心律不齐以及心衰的检测

期刊地址&#xff0c;希望那位大佬根据这个期刊进行创业 &#xff0c;拿到NMPA证书&#xff0c;造福中国人&#xff01;太简便了这个方案。https://www.jacc.org/doi/full/10.1016/j.jchf.2024.01.022https://www.jacc.org/doi/full/10.1016/j.jchf.2024.01.022 背景与目的&…

IP地址的地理位置如何确定?

IP地址的地理位置确定是一个复杂且多步骤的过程&#xff0c;它依赖于多种技术和数据源来实现。下面将详细解释IP地址地理位置是如何被确定的。 首先&#xff0c;我们需要了解IP地址的基本结构。IP地址由一串数字组成&#xff0c;用于标识网络中的设备。这些数字实际上代表了设…

VisualGLM部署微调docker环境

一开始直接在本地环境部署,发现cuda版本冲突,所以改用docker,docke部署既不影响显卡性能,又可以避免环境冲突 1.创建docker容器 1.1. 拉取带有cuda11.7cudnn8的镜像 docker pull andersen9419/cuda11.7.1_cudnn8_ubu22_torch2.01.2.运行容器 docker run --gpus all --netho…

Leetcode30-最小展台数量(66)

1、题目 力扣嘉年华将举办一系列展览活动&#xff0c;后勤部将负责为每场展览提供所需要的展台。 已知后勤部得到了一份需求清单&#xff0c;记录了近期展览所需要的展台类型&#xff0c; demand[i][j] 表示第 i 天展览时第 j 个展台的类型。 在满足每一天展台需求的基础上&am…

233 基于matlab的多通道非负矩阵分解(MNMF)算法

基于matlab的多通道非负矩阵分解&#xff08;MNMF&#xff09;算法。其能够寻找到一个非负矩阵W和一个非负矩阵H&#xff0c;满足条件VW*H,从而将一个非负的矩阵分解为左右两个非负矩阵的乘积。使用EM准则对混合信号进行分解。程序已调通&#xff0c;可直接运行。 233 多通道非…

2024深圳杯数学建模竞赛D题(东三省数学建模竞赛D题):建立非均质音板振动模型与参数识别模型

更新完整代码和成品完整论文 《2024深圳杯&东三省数学建模思路代码成品论文》↓↓↓&#xff08;浏览器打开&#xff09; https://www.yuque.com/u42168770/qv6z0d/zx70edxvbv7rheu7?singleDoc# 2024深圳杯数学建模竞赛D题&#xff08;东三省数学建模竞赛D题&#xff0…

docker容器通俗理解

前言 如果大家没使用过Docker,就在电脑上下载一个VMware Workstation Pro&#xff0c;创建一个虚拟机安装一个windows操作一下感受一下,为什么我的电脑上还以再安装一台windows主机&#xff1f;其实你可以理解为Docker就是Linux系统的一个虚拟机软件。 我的Windows也可以安装…

java开发之路——用户管理中心_简单初始化

用户管理中心_简单初始化 (一) 初始化项目1. 使用 Ant Design Pro(现成的管理系统) 进行前端初始化2. 后端初始化三种初始化java项目 (二) 遇到的问题【问题1】Ant design pro页面打不开&#xff0c;一直在budiling控制台出现错误error-./src/components/index.ts【问题2】初始…