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


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 相关文章推荐
修改jQuery.Autocomplete插件 支持中文输入法 避免TAB、ENTER键失效、导致表单提交
Oct 11 Javascript
JQERY limittext 插件0.2版(长内容限制显示)
Aug 27 Javascript
js中switch case循环实例代码
Dec 30 Javascript
javascript中Date format(js日期格式化)方法小结
Dec 17 Javascript
jQuery Mobile中的button按钮组件基础使用教程
May 23 Javascript
JavaScript中定义对象原型的两种使用方法
Dec 15 Javascript
基于Javascript实现的不重复ID的生成器
Dec 25 Javascript
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
Mar 22 Javascript
浅谈Webpack 持久化缓存实践
Mar 22 Javascript
微信小程序导航栏跟随滑动效果的实现代码
May 14 Javascript
使用vue打包进行云服务器上传的问题
Mar 02 Javascript
js加减乘除精确运算方法实例代码
Jan 17 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中输出转义JavaScript代码的实现代码
2011/04/22 PHP
php 判断访客是否为搜索引擎蜘蛛的函数代码
2011/07/29 PHP
PHP中SESSION使用中的一点经验总结
2012/03/30 PHP
PHP版 汉字转码的实现详解
2013/06/09 PHP
js计算精度问题小结
2013/04/22 Javascript
JQuery中使用.each()遍历元素学习笔记
2014/11/08 Javascript
JavaScript Math.round() 方法
2015/12/18 Javascript
微信页面倒计时代码(解决safari不兼容date的问题)
2016/12/13 Javascript
基于JavaScript实现的希尔排序算法分析
2017/04/14 Javascript
JS实现的简单表单验证功能示例
2017/10/13 Javascript
浅谈Node异步编程的机制
2017/10/18 Javascript
webpack写jquery插件的环境配置
2017/12/21 jQuery
react build 后打包发布总结
2018/08/24 Javascript
mpvue性能优化实战技巧(小结)
2019/04/17 Javascript
Vue.js+cube-ui(Scroll组件)实现类似头条效果的横向滚动导航条
2019/06/24 Javascript
vue+echarts实现动态折线图的方法与注意
2020/09/01 Javascript
解决vue scoped scss 无效的问题
2020/09/04 Javascript
菜鸟使用python实现正则检测密码合法性
2016/01/05 Python
Python+Selenium自动化实现分页(pagination)处理
2017/03/31 Python
python根据多个文件名批量查找文件
2019/08/13 Python
使用Python实现画一个中国地图
2019/11/23 Python
Python一行代码解决矩阵旋转的问题
2019/11/30 Python
python paramiko远程服务器终端操作过程解析
2019/12/14 Python
基于matplotlib xticks用法详解
2020/04/16 Python
如何对python的字典进行排序
2020/06/19 Python
欧洲第一的摇滚和金属乐队服装网站:EMP
2017/10/26 全球购物
全球领先的在线cosplay服装商店:RoleCosplay
2020/01/18 全球购物
javascript实现用户必须勾选协议实例讲解
2021/03/24 Javascript
2014年元旦联欢会活动策划方案
2014/02/16 职场文书
党风廉政建设调研报告
2015/01/01 职场文书
给下属加薪申请报告
2015/05/15 职场文书
新闻稿怎么写
2015/07/18 职场文书
OpenCV中resize函数插值算法的实现过程(五种)
2021/06/05 Python
Python turtle实现贪吃蛇游戏
2021/06/18 Python
对讲机知识
2022/04/07 无线电
Go Grpc Gateway兼容HTTP协议文档自动生成网关
2022/06/16 Golang