企业微信 语音消息 -优化版

想查看web端react-amr的API可以去看此链接  添加链接描述
简说一下:
  一般我们使用移动端微信发的语音是amr文件不是MP3文件;
  而且web端不支持,所以我们要找对应的amr的三方资源去协助我们开发
  这边是通过文件流来获取,如果你想做调试的话,网上amr的文件资源不好找,你可以使用转换器,将你的MP3文件转换成amr文件到本地就可以使用啦!!!

/*** @文件描述  会话管理界面右侧---协助左侧渲染   -语音消息 * @创建人和时间  - 2021-04-28* @更新人和时间  - 2021-05-11* @param {Function} amr - 初始化amr* @param {boolean} isToggleOn - 控制播放暂停图标
*/
import React, { PureComponent } from 'react';
import BenzAMRRecorder from 'benz-amr-recorder';
import { Col, Row, Card } from 'antd';
import { PlayCircleOutlined, PauseCircleOutlined } from '@ant-design/icons';
// import amrCeshi from "../../../../assets/audio/amrCeshi.amr"; // 测试使用
import { wechatV1 as v1 } from 'services/config';
import { getAccessToken } from 'utils/token';export default class Voices extends PureComponent {constructor(props) {super(props);this.state = {amr: new BenzAMRRecorder(),isToggleOn: true,  // 控制播放暂停图标}this.change = this.change.bind(this);}// 点击开始播放change = () => {const { amr } = this.state;if (amr.isPaused()) {amr.play();} else {const { item } = this.props;const that = this;const token = getAccessToken();fetch(`${v1}/wechat/content/${item.id}/media`, {headers: { authorization: `Bearer ${token}` },responseType: 'blob',}).then(res => {that.setState({ data: res })return res.blob()}).then(res => {const reader = new FileReader();reader.readAsDataURL(res);reader.onload = (e) => {that.setState({ img: e.target.result })// amr请求   amr.initWithUrl(e.target.result).then(() => {if (amr.isPlaying()) {amr.onPlay();} else {amr.play();}});// 播放完成自动回到开始播放按钮amr.onEnded(() => {this.setState({amr: new BenzAMRRecorder(),isToggleOn: true,})})}})}this.setState(prevState => ({isToggleOn: !prevState.isToggleOn,}))}// 点击停止播放consol = () => {const { amr } = this.state;this.setState(prevState => ({isToggleOn: !prevState.isToggleOn,}))amr.onPause(() => {console.log(1)})amr.pause();}render() {const { isToggleOn } = this.state;const { item } = this.props;return (<Card size="small" hoverable style={{width:226}}><div style={{ padding: '0px 8px', width: 200, height: 28, backgroundColor: '#eee', borderRadius: "12px" }}>{isToggleOn? (<Row onClick={() => this.change()} style={{ cursor: "pointer" }}><PlayCircleOutlined style={{ fontSize: 19, paddingTop: 5, paddingRight: 2, paddingLeft: 2 }} /><Col span={10} style={{ marginTop: 3, paddingLeft: 6 }}>开始播放</Col><Col style={{ fontSize: 12, marginLeft: 8, marginTop: 5 }}>总时长:{item.v_play_length}&nbsp;S</Col></Row>): (<Row onClick={() => this.consol()}><PauseCircleOutlined style={{ fontSize: 19, paddingTop: 5, paddingRight: 2, paddingLeft: 2 }} /><Col span={10} style={{ marginTop: 3, paddingLeft: 6 }}>停止播放</Col><Col style={{ fontSize: 12, marginLeft: 8, marginTop: 5 }}>总时长:{item.v_play_length}&nbsp;S</Col></Row>)}</div></Card>)}
}

页面展示

此页面样式自己写的,仅做参考
  点击按钮就可以播放,播放完会自动暂停,点击暂停按钮也会自动停止;再次点击的话,会重新播放

react如何请求amr文件流接口-优化版相关推荐

  1. java小知识:http请求传输文件流

    前文:项目里要给第三方传输图片,对方接口要求传文件流,而不是常用的base64编码,在此记录一下- 直接贴代码吧: import com.alibaba.fastjson.JSONObject; im ...

  2. react集成react-pdf获取文件流预览下载pdf,展示电子签章

    1.下载依赖包 代码如下(示例): npm install react-pdf 2.引入依赖包 代码如下(示例): import { Document, Page } from 'react-pdf' ...

  3. 【post请求下载文件流】如何使用post请求下载文件流 blob

    最近有个需求,做文件的下载.其实下载没什么要特别说的,之前都是用的get请求,这次不同,后台用的post请求,返回的是数据流,这种post请求下载文件的方式倒是没怎么弄过.记录一下. 接口 接口地址为 ...

  4. JAVA 实现返回PDF文件流并进行下载

    JAVA 实现返回PDF文件流并进行下载 首先确保本地存放pdf 保证通过路径可以拿到文件 我这边把pdf放在e盘下的目录 1.前台方法 原生ajax 发送请求返回文件流进行下载 function d ...

  5. react接收后端文件_React 文件流实现文件下载

    同种方法-两种方案: 第一种:页面上自己手动添加a标签 第二种:js自动生成a标签(推荐第二种) 今天在react项目开发过程中,有这样的一个需求就是文件下载. 自己认为:通过接口请求后端发给返给自己 ...

  6. react接收后端文件_React获取Java后台文件流并下载Excel文件流程解析

    记录使用blob对象接收java后台文件流并下载为xlsx格式的详细过程,关键部分代码如下. 首先在java后台中设置response中的参数: public void exportExcel(Htt ...

  7. ajax提交用流的方式,ajax 请求 后台返回的文件流

    download(url) { var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); // 也可以使用POST方式,根据接口 xhr. ...

  8. js下载get请求返回的文件流(请求头携带token)

    需求是下载请求接口返回的文件流 var xhh = new XMLHttpRequest(); xhh.open("get", baseUrl+'/cert/download?na ...

  9. react前端下载后端返回文件流(文件流下载excel、csv)

    以前用vue框架的时候,写过不少下载上传的东西,当然包括后端返回文件流供前端下载,现在用react,牵扯到这个功能,又提起来说,有两种下载类型,一种是Excel,一种是Csv. 首先后端返回这种: 或 ...

  10. 2021-09-07-OSB学习(接口下载文件--流)

    OSB学习(接口下载文件[流的形式]) 什么是使用流文件传输 1.我们要干什么 2.接口开发 2.1.控制台通过执行PL显示流文件信息 2.1.1.创建基本的目录结构 2.1.2.打开项目,然后创建B ...

最新文章

  1. linux中用户的权限是什么,linux中用户权限设置与更改相关介绍(上)
  2. <java并发编程实践>读书笔记二
  3. 在springboot中使用mybatis generate自动生成实体类和mapper
  4. Mongoose之 SchemaTypes 数据类型
  5. Black White(尺取)
  6. 吓坏了!智能锁半夜自己“离奇打开”
  7. geoiplookup命令没有任何输出问题
  8. 使用jdk进行数据迁移(sqlite迁移mysql)
  9. 2020博客之星年度总评选 - 显示排名
  10. five笔记1:ppt软件和文件打不开
  11. 计算机的数学知识的手抄报图片大全,【数学小报图片大全】数学小报简单又漂亮_简单数学小报图片大全_亲亲宝贝网...
  12. 【译】LiveData三连
  13. 7-1 软硬车厢交替排列 (13 分)
  14. 腾讯 爱奇艺服务器(网址)无法访问(打不开,没有网络)
  15. 抛弃Eclipse!
  16. BootStrap框架-旅游网页设计
  17. Qt中使用诺基亚HERE地图的方式
  18. VlookupTool工具说明
  19. 威动服务器如何添加文件,超级简单搭建自己的私人影视库
  20. 信捷伺服刚性调整_伺服电机刚性怎么调整

热门文章

  1. 屏幕缩放和注释工具(ZoomIt)
  2. PhotoshopCC 2018(19.1.3)绿色精简/增强无需注册安装直接用
  3. win7空文件夹删不掉的原因及解决方法
  4. 1214-赚钱的单子绝不能亏钱出,止损也不能设的太大。
  5. JAVA边界布局和setbound_深入探究frame和bounds的区别以及setbounds使用
  6. Python学习两个月心得
  7. 小米pro15拆机_小米笔记本Pro 15增强版拆解:重新定义高质低价
  8. 微信小程序地图图标controltap
  9. python控制51单片机的红绿灯_51单片机实现红绿灯控制的代码+Proteus仿真
  10. 最新!Win10安装Mysql 5.7.22免安装版的图文教程(路过太多的坑了)