上传声音 微信小程序_SpringBoot开发案例之微信小程序录音上传
前言
书接上回的《SpringBoot开发案例之微信小程序文件上传》,正常的业务流程是,口语测评需要学生通过前端微信小程序录入一段音频,通过调用第三方音频处理服务商进行评分,然后服务端对原始录音、标准录音以及评分信息进行存储,最终呈现给学生并用于复看以及复读。
微信端
index.wxml:
开始录音
暂停录音
停止录音
播放录音
上传录音
index.wxss:
.btn{
margin-top: 10rpx;
}
index.js:
//录音管理
const recorderManager = wx.getRecorderManager()
//音频组件控制
const innerAudioContext = wx.createInnerAudioContext()
var tempFilePath;
Page({
data: {
},
//开始录音的时候
start: function () {
const options = {
duration: 10000,//指定录音的时长,单位 ms
sampleRate: 16000,//采样率
numberOfChannels: 1,//录音通道数
encodeBitRate: 96000,//编码码率
format: 'mp3',//音频格式,有效值 aac/mp3
frameSize: 50,//指定帧大小,单位 KB
}
//开始录音
recorderManager.start(options);
recorderManager.onStart(() => {
console.log('recorder start')
});
//错误回调
recorderManager.onError((res) => {
console.log(res);
})
},
//暂停录音
pause: function () {
recorderManager.onPause();
console.log('暂停录音')
},
//停止录音
stop: function () {
recorderManager.stop();
recorderManager.onStop((res) => {
this.tempFilePath = res.tempFilePath;
console.log('停止录音', res.tempFilePath)
const { tempFilePath } = res
})
},
//播放声音
play: function () {
innerAudioContext.autoplay = true
innerAudioContext.src = this.tempFilePath,
innerAudioContext.onPlay(() => {
console.log('开始播放')
})
innerAudioContext.onError((res) => {
console.log(res.errMsg)
console.log(res.errCode)
})
},
//上传录音
upload:function(){
wx.uploadFile({
url: "https://xxx.com/fileUpload",//演示域名、自行配置
filePath: this.tempFilePath,
name: 'file',
header: {
"Content-Type": "multipart/form-data"
},
formData:
{
userId: 12345678 //附加信息为用户ID
},
success: function (res) {
console.log(res);
wx.showToast({
title: '上传成功',
icon: 'success',
duration: 2000
})
},
fail: function (res) {
console.log(res);
},
complete: function (res) {
}
})
},
onLoad: function () {
},
})
上传服务
/**
* 口语测试
* 创建者 柒
* 创建时间 2018年3月13日
*/
@Api(tags ="口语测试接口")
@RestController
@RequestMapping("/test")
public class TestController {
private final static Logger LOGGER = LoggerFactory.getLogger(WechatController.class);
@Value("${web.upload.path}")
private String uploadPath;
@ApiOperation(value="上传文件(小程序)")
@PostMapping("/fileUpload")
public String upload(HttpServletRequest request, @RequestParam("file")MultipartFile[] files){
LOGGER.info("上传测试");
//多文件上传
if(files!=null && files.length>=1) {
BufferedOutputStream bw = null;
try {
String fileName = files[0].getOriginalFilename();
//判断是否有文件(实际生产中要判断是否是音频文件)
if(StringUtils.isNoneBlank(fileName)) {
//创建输出文件对象
File outFile = new File(uploadPath + UUID.randomUUID().toString()+ FileUtil.getFileType(fileName));
//拷贝文件到输出文件对象
FileUtils.copyInputStreamToFile(files[0].getInputStream(), outFile);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(bw!=null) {bw.close();}
} catch (IOException e) {
e.printStackTrace();
}
}
}
return "success";
}
}
上传声音 微信小程序_SpringBoot开发案例之微信小程序录音上传相关推荐
- 微信小程序|基于小程序+云开发制作一个菜谱小程序
今天吃什么?这是一个让强迫症左右为难的问题,跟随此文基于小程序+云开发制作一个菜谱小程序,根据现有食材一键生成菜谱,省心又省力. 一.小程序 1. 创建小程序
- 如何在微信公众帐号开发模式下,通过程序代码向用户发送符号表情。
本文重点介绍如何在微信公众帐号开发模式下,通过程序代码向用户发送符号表情.部分代码来自:FreeEIM 至于如何识别用户发送的是符号表情,就不在此讲解了,留给大家一点学习思考的空间.我只是给大家一个提 ...
- 如何在微信公众帐号开发模式下,通过程序代码向用户发送符号表情
本文重点介绍如何在微信公众帐号开发模式下,通过程序代码向用户发送符号表情.部分代码来自:FreeEIM 至于如何识别用户发送的是符号表情,就不在此讲解了,留给大家一点学习思考的空间.我只是给大家一个提 ...
- 个人微信号二次开发sdk协议,微信个人号开发API接口
个人微信号二次开发sdk协议,微信个人号开发API接口 微信SDK程序概要说明 个人微信号开发sdk非微信ipad协议.非mac协议,非安卓协议,api可实现微信99%功能: 无需扫码登录.可收发朋友 ...
- 微信公众号H5开发,在微信浏览器打开H5,无法一键下载图片
微信公众号H5开发,在微信浏览器打开H5,无法一键下载图片 背景 解决方案 文章参考 背景 微信公众号H5开发,在普通浏览器,可以直接通过以下代码下载图片: let a = document.crea ...
- 微信公众开放平台开发08---纯java 实现微信开发:编写自定义菜单
微信公众开放平台开发08---纯java 实现微信开发:编写自定义菜单 微信公众开放平台开发08---纯java 实现微信开发:编写自定义菜单 技术qq交流群:JavaDream:251572072 ...
- 企业微信SCRM系统部署_企业微信SCRM二次开发_企业微信SCRM系统独立版源码价格
企业微信SCRM系统部署_企业微信SCRM二次开发_企业微信SCRM系统独立版源码价格 点趣互动是企业微信系统的第三方应用提供厂商,用于管理员工企业微信的内一款系统软件.点趣互动企业微信scrm软件主 ...
- 微信小程序云开发---vant组件 van-uploader 实现视频文件上传到云存储,发动态功能
pages/upVideo.wxml //获取用户的头像和昵称展示 <view class="headerBox"><image src="{{user ...
- 微信小程序云开发项目——多肉植物销售小程序
前言 此项目为本人在大学的毕业设计作品,基于微信小程序云开发技术进行开发,暂未商用和托管.编写文章意在为求职做准备,亦乐于与大家进行经验交流分享,欢迎进行评论咨询哦. 简介 用户角色分为:一般顾客.商 ...
最新文章
- linux+输出分页,是否可以在zsh中自动分页输出?
- OSChina 周三乱弹 ——是不是兄弟?是兄弟就帮我解决下!
- .NET 6 攻略大全(二)
- spring boot redis 分布式锁
- 怎么在linux终端上sed,Linux中如何使用sed命令
- NewBeeNLP 年中 | From NewBee To NB
- Ios精品源码,扁平化的ActionSheet仿花椒截屏demo文件签名重叠卡片滚动汽车仪表盘...
- php 不恒等,php运算符==怎么使用以及与===恒等的区别是什么?
- linux下下载文件到谷歌云盘,如何使用wget下载谷歌云端硬盘里的文件
- 一起学英语 | 用JavaScript实现数字阶乘的三种方法
- 计算机英语拼读法,常用计算机英语词汇:CPU
- Win10升级要卸载virtualbox virtualbox怎么办
- Java实现N元一次方程组求解
- My Eighty-first Page - 打家劫舍 - By Nicolas
- JavaScript完成知乎页面
- 用树莓派做一个实时垃圾分类器|超实用!!
- 计算机网络水晶头博客,两台电脑组成局域网(交叉线)的水晶头制作详解
- maven联网下载依赖时,在中央仓库找不到要下载的依赖
- 【毕业设计】大数据电商销售预测分析 - python 数据分析
- 世坤投资大学:欲提供数据科学硕士学位的对冲基金
热门文章
- 走捷径修Bug却引起全球大宕机,Salesforce哭着处理了“肇事”工程师
- 新年快乐,送一台新款华为笔记本!
- Mobvista首席架构师蔡超:工作感悟之失败与成功,我的8点总结
- 卖身字节跳动的互动百科或被改名
- Java实现图片压缩代码,图片大小转换
- 简单实现Popup弹出框添加数据
- 最简单的EasyUI菜单栏
- ORA-01919: role 'OLAPI_TRACE_USER' does not exist
- linux与windows查看占用端口的进程ID并杀死进程
- maven的Windows环境下安装配置