小程序实现录音上传功能


Posted in Javascript onNovember 22, 2019

本文实例为大家分享了小程序录音上传的具体代码,供大家参考,具体内容如下

首先我们可以先看一下微信小程序的API

这里有关于小程序录音的一些基本配置

小程序实现录音上传功能

index.wxml:

<view class='progress_box' bindtap='openRecording' style="display:{{openRecordingdis}}">
    <view class="progress_bgs">
     <view class="progress_bg">
      <image class="progress_img" src='../../../images/SubjectInformation/luyin.png'></image>
     </view>
   </view>
</view>

index.wxss:

.topicRecording {
 float: left;
 width: 40%;
 height: 100%;
 position: relative;
}
 
 
.progress_box {
 width: 130rpx;
 height: 130rpx;
 margin-left: -65rpx;
 position: absolute;
 bottom: 0;
 left: 50%;
 display: flex;
 align-items: center;
 justify-content: center;
 background: #ccc;
 border-radius: 50%;
}
 
.progress_bgs {
 width: 114rpx;
 height: 114rpx;
 background: #fff;
 border-radius: 50%;
 margin: 9rpx;
}
 
 
.progress_bg {
 width: 106rpx;
 height: 106rpx;
 margin: 5rpx;
 position: absolute;
 background: #444;
 border-radius: 50%;
}
 
 
 
.progress_img {
 width: 82rpx;
 height: 82rpx;
 border-radius: 50%;
 margin: 12rpx;
}

index.js:

Page({
 data: {
  openRecordingdis: "block",//录音图片的不同
  shutRecordingdis: "none",//录音图片的不同
  recordingTimeqwe:0,//录音计时
  setInter:""//录音名称
 },
 
  //录音计时器
 recordingTimer:function(){
  var that = this;
  //将计时器赋值给setInter
  that.data.setInter = setInterval(
   function () {
    var time = that.data.recordingTimeqwe + 1;
    that.setData({
     recordingTimeqwe: time
    })
   }
   , 1000); 
 },
 
 
 //开始录音
 openRecording: function() {
  var that = this;
  wx.getSystemInfo({
   success: function(res) {
    that.setData({
     shutRecordingdis: "block",
     openRecordingdis: "none"
    })
   }
  })
  const options = {
   duration: 60000, //指定录音的时长,单位 ms,最大为10分钟(600000),默认为1分钟(60000)
   sampleRate: 16000, //采样率
   numberOfChannels: 1, //录音通道数
   encodeBitRate: 96000, //编码码率
   format: 'mp3', //音频格式,有效值 aac/mp3
   frameSize: 50, //指定帧大小,单位 KB
  }
  //开始录音计时  
  that.recordingTimer();
  //开始录音
  recorderManager.start(options);
  recorderManager.onStart(() => {
   console.log('。。。开始录音。。。')
  });
  //错误回调
  recorderManager.onError((res) => {
   console.log(res);
  })
 },
 
 //结束录音
 shutRecording: function() {
  var that = this;
  wx.getSystemInfo({
   success: function(res) {
    that.setData({
     shutRecordingdis: "none",
     openRecordingdis: "block"
    })
   }
  })
  recorderManager.stop();
  recorderManager.onStop((res) => {
   console.log('。。停止录音。。', res.tempFilePath)
   const {tempFilePath} = res;
   //结束录音计时 
   clearInterval(that.data.setInter);
   //上传录音
   wx.uploadFile({
    url: appURL + '/wx_SubjectInformation/wx_SubjectRecordKeeping.do',//这是你自己后台的连接
    filePath: tempFilePath,
    name:"file",//后台要绑定的名称
    header: {
     "Content-Type": "multipart/form-data"
    },
    //参数绑定
    formData:{
     recordingtime: that.data.recordingTimeqwe,
     topicid: that.data.topicid,
     userid:1,
     praisepoints:0
    },
    success:function(ress){
     console.log(res);
     wx.showToast({
      title: '保存完成',
      icon:'success',
      duration:2000
     })
    },
    fail: function(ress){
     console.log("。。录音保存失败。。");
    }
   })
  })
 },
 
 //录音播放
 recordingAndPlaying: function(eve) {
  wx.playBackgroundAudio({
   //播放地址
   dataUrl: '' + eve.currentTarget.dataset.gid + ''
  })
 },
 
})

上传服务

@RequestMapping(value = "/wx_SubjectRecordKeeping", produces = "application/json")
 @ResponseBody
 public Object wx_SubjectRecordKeeping(HttpServletRequest request,
  @RequestParam("file") MultipartFile files, String recordingtime,
  int topicid,int userid,int praisepoints) {
 // 构建上传目录路径
 // request.getServletContext().getRealPath("/upload");
 String uploadPath = 你自己保存音频的URL;
 // 如果目录不存在就创建
 File uploadDir = new File(uploadPath);
 if (!uploadDir.exists()) {
  uploadDir.mkdir();
 }
 // 获取文件的 名称.扩展名
 String oldName = files.getOriginalFilename();
 String extensionName = "";
 // 获取原来的扩展名
 if ((oldName != null) && (oldName.length() > 0)) {
  int dot = oldName.lastIndexOf('.');
  if ((dot > -1) && (dot < (oldName.length() - 1))) {
  extensionName = oldName.substring(dot);
  }
 }
 // 构建文件名称
 String fileName = System.currentTimeMillis() + "_" + System.nanoTime()
  + extensionName;
 // 获取
 String[] fileType = { ".CD", ".WAVE", ".AIFF", ".AU", ".MPEG", ".MP3",
  ".MPEG-4", ".MIDI", ".WMA", ".RealAudio", ".VQF", ".OggVorbis",
  ".AMR" };
 List<String> fileTyepLists = Arrays.asList(fileType);
 int fileTypeOnCount = 0;
 for (String fileTyepListss : fileTyepLists) {
  if (fileTyepListss.equalsIgnoreCase(extensionName)) {
  // -----如果是音频文件的话
  // 构建文件路径
  String filePath = uploadPath + File.separator + fileName;
  // 保存文件
  try {
   FileUtils.writeByteArrayToFile(new File(filePath),
    files.getBytes());
  } catch (Exception e) {
   e.printStackTrace();
  }
  } else {
  fileTypeOnCount++;
  }
 }
 if (fileTypeOnCount == fileTyepLists.size()) {
  // 不是音频文件
  return false;
 }
 return false;
 }

效果图

点击开始录音、录完后点击结束录音

小程序实现录音上传功能小程序实现录音上传功能

录音成功后的返回

小程序实现录音上传功能

录制的音频文件

小程序实现录音上传功能

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS获取页面窗口大小的代码解读
Dec 01 Javascript
JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)
Oct 01 Javascript
js实现用户注册协议倒计时的方法
Jan 21 Javascript
运行Node.js的IIS扩展iisnode安装配置笔记
Mar 02 Javascript
javascript实现10个球随机运动、碰撞实例详解
Jul 08 Javascript
mui开发中获取单选按钮、复选框的值(实例讲解)
Jul 24 Javascript
Bootstrap-table使用footerFormatter做统计列功能
Sep 07 Javascript
vue项目中引入Sass实例方法
Aug 27 Javascript
vue.js实现二级菜单效果
Oct 19 Javascript
Vue页面刷新记住页面状态的实现
Dec 27 Javascript
基于JavaScript实现猜数字游戏代码实例
Jul 30 Javascript
基于Vant UI框架实现时间段选择器
Dec 24 Javascript
vue使用recorder.js实现录音功能
Nov 22 #Javascript
微信小程序开发摇一摇功能
Nov 22 #Javascript
js实现录音上传功能
Nov 22 #Javascript
解决vue自定义全局消息框组件问题
Nov 22 #Javascript
JavaScript实现省市联动效果
Nov 22 #Javascript
Vue混入mixins滚动触底的方法
Nov 22 #Javascript
超简单的微信小程序轮播图
Nov 22 #Javascript
You might like
php自动加载的两种实现方法
2010/06/21 PHP
PHP中图片等比缩放的实例
2013/03/24 PHP
PHP之短标签开启设置
2013/06/17 PHP
PHP利用REFERER根居访问来地址进行页面跳转
2013/09/28 PHP
php基于openssl的rsa加密解密示例
2016/07/11 PHP
php图片添加水印例子
2016/07/20 PHP
PHP常用函数之格式化时间操作示例
2019/10/21 PHP
30分钟就入门的正则表达式基础教程
2013/02/25 Javascript
js关闭父窗口时关闭子窗口
2013/04/01 Javascript
用jquery等比例控制图片宽高的具体实现
2014/01/28 Javascript
用jQuery toggleClass 实现鼠标移上变色
2014/05/14 Javascript
JS+CSS实现弹出全屏灰黑色透明遮罩效果的方法
2014/12/20 Javascript
jQuery中on()方法用法实例
2015/01/19 Javascript
全面解析标签页的切换方式
2016/08/21 Javascript
Javascript6中字符串的四个新用法分享
2016/09/11 Javascript
Bootstrap如何激活导航状态
2017/03/22 Javascript
JavaScript模块详解
2017/12/18 Javascript
初学vue出现空格警告的原因及其解决方案
2019/10/31 Javascript
Vue Object 的变化侦测实现代码
2020/04/15 Javascript
vue下canvas裁剪图片实例讲解
2020/04/16 Javascript
JavaScript 获取滚动条位置并将页面滑动到锚点
2021/02/08 Javascript
用TensorFlow实现戴明回归算法的示例
2018/05/02 Python
Python SVM(支持向量机)实现方法完整示例
2018/06/19 Python
创建Django项目图文实例详解
2019/06/06 Python
Python学习笔记基本数据结构之序列类型list tuple range用法分析
2019/06/08 Python
使用python将mysql数据库的数据转换为json数据的方法
2019/07/01 Python
Python 如何调试程序崩溃错误
2020/08/03 Python
澳大利亚设计的优质鞋类和适合澳大利亚生活方式的服装:Rivers
2019/04/23 全球购物
酒店管理专业学生求职信
2013/09/27 职场文书
人力资源管理毕业生自荐信
2013/11/21 职场文书
医大实习自我鉴定
2013/12/07 职场文书
成功的酒店创业计划书
2013/12/27 职场文书
校长师德表现自我评价
2015/03/04 职场文书
法律意见书范文
2015/05/20 职场文书
原告代理词范文
2015/05/25 职场文书
pandas时间序列之pd.to_datetime()的实现
2022/06/16 Python