Vue接收接口返回的mp3格式数据并支持在页面播放音频

一、背景简介

在实际工作中需要开发一个转音频工具,并且能够在平台页面点击播放按钮播放音频

二、相关知识介绍

2.1 JS内置对象Blob

Blob对象通常用于处理大量的二进制数据,可以读取/写入/操作文件、音视频等二进制数据流。Blob表示了一段不可变的二进制数据。

  • 当你需要从服务器下载文件时,你可以将响应类型设置为'blob',然后通过 window.URL.createObjectURL(blob) 方法创建一个表示该Blob的url,最后将这个url用于下载链接
  • 当你需要上传文件时,你可以通过File API获取到一个Blob对象,然后通过FormData API将它发送到服务器
  • 当你需要在浏览器中处理大量的二进制数据时,比如视频、音频或图片,Blob对象可以提供一个有效的处理方式

一个自己没有验证过的栗子

复制代码
new Vue({
  el: '#app',
  methods: {
    downloadFile() {
      fetch('https://example.com/somefile.txt')
        .then(response => response.blob())
        .then(blob => {
          let url = window.URL.createObjectURL(blob);
          let a = document.createElement('a');
          a.href = url;
          a.download = 'somefile.txt';
          a.click();
          window.URL.revokeObjectURL(url);
        });
    }
  }
});

2.2 Vue中fetch和axios请求后端API的区别

  1. 功能和灵活性:
    axios:axios是一个基于Promise的HTTP库,可以在浏览器和Node.js中使用。它提供了更多的功能和灵活性,例如拦截请求和响应、转换请求和响应数据、取消请求、自动转换JSON数据等。这些功能可以帮助你更方便地处理HTTP请求和响应。
    fetch:fetch是一个现代的浏览器内置函数,用于发送HTTP请求。它返回一个Promise对象,可以用来处理异步操作。然而,fetch API本身的功能比较有限,需要配合其他工具或库来处理请求和响应数据。
  2. 错误处理:
    axios:axios使用Promise API,可以利用catch方法来捕获错误并进行处理。它还提供了onDownloadProgress和onUploadProgress回调函数,可以用于处理下载和上传进度事件。
    fetch:fetch返回的Promise对象可以使用catch方法来捕获错误。但是,由于fetch不提供下载和上传进度的回调函数,因此需要在fetch请求中自行实现。
  3. 浏览器兼容性:
    fetch:fetch API在大多数现代浏览器中得到了广泛支持,但在一些较旧的浏览器版本中可能不受支持。为了确保兼容性,可能需要使用polyfill或替代方案。
    axios:axios是一个独立的库,可以在任何支持Promise的浏览器中使用,因此具有更好的浏览器兼容性。
  4. 社区和支持:
    axios:axios拥有庞大的用户基础和活跃的社区支持,这意味着你可以在遇到问题时更容易找到解决方案和帮助。
    fetch:fetch是浏览器内置的API,因此没有像axios那样的社区支持。但是,由于它是标准化的API,因此它的行为在不同的浏览器中应该是相同的。

三、实际应用

步骤一:

注意:当后端接口返回结果是一个二进制音频数据时,前端在使用axios请求时需要添加一段额外信息{responseType: 'blob'}

步骤二:使用audio标签用于播放音频

复制代码
<audio
	ref="audioPlayer"
	:src="audioUrl"
	controls
>
</audio>

步骤三:请求后端接口后的处理方法

最终效果如下图所示

相关推荐
008爬虫实战录7 小时前
【码上爬】 题十:魔改算法 堆栈分析,找加密值过程详解
前端·python·算法
无人装备硬件开发爱好者7 小时前
深度解析GPS天线设计:从贴片天线到LNA前端的完整硬件方案
前端
threelab7 小时前
Three.js 数学函数着色器 | 三维可视化 / AI 提示词
javascript·人工智能·着色器
卷帘依旧8 小时前
React Hook采用环形链表的原因
前端
lichenyang4538 小时前
从 HarmonyOS AI 聊天模块理解工程化架构:MVVM、Controller、Provider、请求封装与 SSE
前端
卷帘依旧8 小时前
为什么React Hooks不能用在if/for等条件/循环语句中
前端
ZC跨境爬虫8 小时前
跟着 MDN 学CSS day_3:(为一个传记页面添加样式)
前端·javascript·css·ui·音视频·html5
夜雪闻竹9 小时前
sql.js WASM 实战:浏览器里跑 SQLite
javascript·sql·wasm
从文处安9 小时前
「前端何去何从」混乱到有序的状态管理: Reducer 与 Context
前端·react.js
爱喝铁观音的谷力景辉9 小时前
在Cesium中实现带箭头方向路线样式的技术详解
javascript·cesium