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


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 相关文章推荐
JavaScript版代码高亮
Jun 26 Javascript
jQuery基础框架浅入剖析
Dec 27 Javascript
javascript静态页面传值的三种方法分享
Nov 12 Javascript
ie7+背景透明文字不透明超级简单的实现方法
Jan 17 Javascript
JavaScript实现的类字典插入或更新方法实例
Jul 10 Javascript
js实现精确到秒的倒计时效果
May 29 Javascript
基于JS实现横线提示输入验证码随验证码输入消失(js验证码的实现)
Oct 27 Javascript
AngularJS实现的回到顶部指令功能实例
May 17 Javascript
微信小程序页面滑动屏幕加载数据效果
Nov 16 Javascript
详解Vue CLI3 多页应用实践和源码设计
Aug 30 Javascript
Js中使用正则表达式验证输入是否有特殊字符
Sep 07 Javascript
node.js制作一个简单的登录拦截器
Feb 10 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
比较discuz和ecshop的截取字符串函数php版
2012/09/03 PHP
discuz免激活同步登入代码修改方法(discuz同步登录)
2013/12/24 PHP
php教程之魔术方法的使用示例(php魔术函数)
2014/02/12 PHP
PHP 抽象方法与抽象类abstract关键字介绍及应用
2014/10/16 PHP
ThinkPHP下表单令牌错误与解决方法分析
2017/05/20 PHP
php 读写json文件及修改json的方法
2018/03/07 PHP
基于JQuery的cookie插件
2010/04/07 Javascript
比Jquery的document.ready更快的方法
2010/04/28 Javascript
asp.net下使用jquery 的ajax+WebService+json 实现无刷新取后台值的实现代码
2010/09/19 Javascript
jQuery的运行机制和设计理念分析
2011/04/05 Javascript
为指定的元素添加遮罩层的示例代码
2014/01/15 Javascript
JavaScript中的style.cssText使用教程
2014/11/06 Javascript
jQuery的图片滑块焦点图插件整理推荐
2014/12/07 Javascript
js控制输入框获得和失去焦点时状态显示的方法
2015/01/30 Javascript
PHP 数组current和next用法分享
2015/03/05 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
2015/08/25 Javascript
全面解析Bootstrap表单样式的使用
2016/09/09 Javascript
Javascript基础回顾之(三) js面向对象
2017/01/31 Javascript
JavaScript获取ul中li个数的方法
2017/02/13 Javascript
vue-router项目实战总结篇
2018/02/11 Javascript
使用vuex缓存数据并优化自己的vuex-cache
2018/05/30 Javascript
jQuery实现获取当前鼠标位置并输出功能示例
2019/01/05 jQuery
原生js生成图片验证码
2020/10/11 Javascript
[03:06]V社市场总监Dota2项目负责人Erik专访:希望更多中国玩家加入DOTA2
2014/07/11 DOTA
python使用psutil模块获取系统状态
2016/08/27 Python
tensorflow 中对数组元素的操作方法
2018/07/27 Python
python 分离文件名和路径以及分离文件名和后缀的方法
2018/10/21 Python
Python opencv实现人眼/人脸识别以及实时打码处理
2019/04/29 Python
安装好Pycharm后如何配置Python解释器简易教程
2019/06/28 Python
Django命名URL和反向解析URL实现解析
2019/08/09 Python
如何在Shell脚本中使用函数
2015/09/06 面试题
园艺师求职信
2014/03/10 职场文书
大学生活自我评价
2014/04/09 职场文书
公司考勤管理制度
2015/08/04 职场文书
maven依赖的version声明控制方式
2022/01/18 Java/Android
大脑的记忆过程在做数据压缩,不同图形也有共同的记忆格式
2022/04/29 数码科技