小程序采集录音并上传到后台


Posted in Javascript onNovember 22, 2019

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

demo.wxml

<view>
 <button bindtap='startRecordMp3' type='primary'>录音开始(mp3)</button>
</view>
<view>
 <button bindtap='stopRecord' type='primary'>录音结束</button>
</view>
<view>
 <button bindtap='playRecord' type='primary'>播放录音</button>
</view>
<view>
 <button bindtap='sendRecord' type='primary'>播放录音</button>
</view>

demo.wxss

view{
 padding: 15px;
}

demo.js

// pages/newMusic/index.js
const recorderManager = wx.getRecorderManager();
Page({

  data: {
    
  },

  /**
  * 提示
  */
  tip: function (msg) {
    wx.showModal({
      title: '提示',
      content: msg,
      showCancel: false
    })
  }

  /**
   * 录制mp3音频
  */
  , startRecordMp3: function () {
    recorderManager.start({
      format: 'mp3'
    });
  }

  /**
   * 停止录音
   */
  , stopRecord: function () {
    recorderManager.stop()
  }

  /**
   * 播放录音
   */
  , playRecord: function () {
    var that = this;
    var src = this.data.src;
    if (src == '') {
      this.tip("请先录音!")
      return;
    }
    this.innerAudioContext.src = this.data.src;
    this.innerAudioContext.play()
  },

  onLoad: function (options) {
    var that = this;
    recorderManager.onError(function () {
      that.tip("录音失败!")
    });
    recorderManager.onStop(function (res) {
      that.setData({
        src: res.tempFilePath
      })
      console.log(res.tempFilePath)
      that.tip("录音完成!")
    });

    this.innerAudioContext = wx.createInnerAudioContext();
    this.innerAudioContext.onError((res) => {
      that.tip("播放录音失败!")
    })

  }

})

java后台接收

package com.azor.controller;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang.StringUtils;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import com.azor.utils.HttpAPIService;

import ch.qos.logback.classic.Logger;
import net.sf.json.JSONObject;

@RestController
@RequestMapping("/base_voice")
public class BaseController {
 
 private static final Logger logger = (Logger) LoggerFactory.getLogger(BaseController.class);
 private static String lineSeparator = System.getProperty("line.separator");
 
 @Autowired
 protected Environment env;
 
 @Autowired
 protected HttpAPIService httpAPIService;
 
 /** 上传文件保存路径 */
 private final String FILE_SAVE_PATH = "D:/photo/jac_hr_miniprogram_file/";

 /** 主业务数据Map */
 protected Map<String, Object> dataMap = new HashMap<>();
 
 /** HTTP POST 请求Map */
 protected Map<String, Object> postMap = new HashMap<>();
 
 @RequestMapping("/file_upload")
 public void saveFile(HttpServletRequest request, String url) throws Exception {
 logger.info("文件上传开始" + lineSeparator);
 // 1.获取从前台传过来得图片
 MultipartHttpServletRequest req = (MultipartHttpServletRequest) request;
 MultipartFile multipartFile = req.getFile("file");
 
 // 2.获得文件扩展名
 String extOfFile = getExtOfFile(multipartFile);
 // 3.保存到本地
 BufferedOutputStream bos = null;
 String filename = null;
 try {
  File dir = new File(file_save_path);
  if (!dir.exists()) {// 判断文件目录是否存在
  dir.mkdirs();
  }
  filename = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + (int) (Math.random() * 1000) + "."
   + extOfFile;
  bos = new BufferedOutputStream(new FileOutputStream(file_save_path + filename));
  bos.write(multipartFile.getBytes());

 } catch (Exception e) {
  e.printStackTrace();
 } finally {
  if (bos != null) {
  try {
   bos.close();
  } catch (IOException e) {
   e.printStackTrace();
  }
  }

 }
 
 }
 
 public String getExtOfFile(MultipartFile multipartFile) {
 // 获取文件的 名称.扩展名
 String oldName = multipartFile.getOriginalFilename();
 String extensionName = "";
 // 获取原来的扩展名
 if ((oldName != null) && (oldName.length() > 0)) {
  int dot = oldName.lastIndexOf('.');
  if ((dot > -1) && (dot < (oldName.length() - 1))) {
  extensionName = oldName.substring(dot+1);
  }
 }
 return extensionName;
 }
}

效果

小程序采集录音并上传到后台

小程序采集录音并上传到后台

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

Javascript 相关文章推荐
Some tips of wmi scripting in jscript (1)
Apr 03 Javascript
JavaScript 中的事件教程
Apr 05 Javascript
JS代码判断IE6,IE7,IE8,IE9的函数代码
Aug 02 Javascript
jquery清空表单数据示例分享
Feb 13 Javascript
Easyui form combobox省市区三级联动
Jan 13 Javascript
原生js实现autocomplete插件
Apr 14 Javascript
JavaScript reduce和reduceRight详解
Oct 24 Javascript
jquery获取input type=text中的值的各种方式(总结)
Dec 02 Javascript
JavaScript订单操作小程序完整版
Jun 23 Javascript
基于JQuery的Ajax方法使用详解
Aug 16 jQuery
vue下拉菜单组件(含搜索)的实现代码
Nov 25 Javascript
详解将微信小程序接口Promise化并使用async函数
Aug 05 Javascript
webpack优化之代码分割与公共代码提取详解
Nov 22 #Javascript
小程序实现录音上传功能
Nov 22 #Javascript
vue使用recorder.js实现录音功能
Nov 22 #Javascript
微信小程序开发摇一摇功能
Nov 22 #Javascript
js实现录音上传功能
Nov 22 #Javascript
解决vue自定义全局消息框组件问题
Nov 22 #Javascript
JavaScript实现省市联动效果
Nov 22 #Javascript
You might like
PHP更新购物车数量(表单部分/PHP处理部分)
2013/05/03 PHP
基于Discuz security.inc.php代码的深入分析
2013/06/03 PHP
php cookie名使用点号(句号)会被转换
2014/10/23 PHP
主流PHP框架的优缺点对比分析
2014/12/25 PHP
关于PHP中协程和阻塞的一些理解与思考
2017/08/11 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
PHP PDOStatement::rowCount讲解
2019/02/01 PHP
PHP与Web页面的交互示例详解二
2020/08/04 PHP
js资料prototype 属性
2007/03/13 Javascript
js 模拟气泡屏保效果代码
2010/07/10 Javascript
jQuery 阴影插件代码分享
2012/01/09 Javascript
兼容主流浏览器的jQuery+CSS 实现遮罩层的简单代码
2014/10/14 Javascript
jQuery中prev()方法用法实例
2015/01/08 Javascript
js实现滚动条滚动到页面底部继续加载
2015/12/19 Javascript
基于JS实现密码框(password)中显示文字提示功能代码
2016/05/27 Javascript
Ionic默认的Tabs模板使用实例
2016/08/29 Javascript
jQuery Easyui 下拉树组件combotree
2016/12/16 Javascript
微信小程序支付PHP代码
2018/08/23 Javascript
[06:11]2014DOTA2国际邀请赛 专访团结一心的VG战队
2014/07/21 DOTA
python处理按钮消息的实例详解
2017/07/11 Python
浅谈python for循环的巧妙运用(迭代、列表生成式)
2017/09/26 Python
python3爬取淘宝信息代码分析
2018/02/10 Python
使用 Python 实现简单的 switch/case 语句的方法
2018/09/17 Python
Python装饰器限制函数运行时间超时则退出执行
2019/04/09 Python
使用python实现时间序列白噪声检验方式
2020/06/03 Python
详解Selenium 元素定位和WebDriver常用方法
2020/12/04 Python
北美三大旅游网站之一:Travelocity加拿大
2016/08/20 全球购物
广州地球村科技数据库题目
2016/04/25 面试题
深入开展党的群众路线教育实践活动方案
2014/02/04 职场文书
社区活动总结报告
2014/05/05 职场文书
党员干部群众路线个人整改措施
2014/09/18 职场文书
世界红十字日活动总结
2015/02/10 职场文书
2016年大学生暑假爱心支教活动策划书
2015/11/26 职场文书
2016年大学生党员公开承诺书
2016/03/24 职场文书
解决Mysql多行子查询的使用及空值问题
2022/01/22 MySQL
MySQL数据库优化之通过索引解决SQL性能问题
2022/04/10 MySQL