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


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 相关文章推荐
10个基于jQuery或JavaScript的WYSIWYG 编辑器整理
May 06 Javascript
js 创建书签小工具之理论
Feb 25 Javascript
JS选中checkbox后获取table内一行TD所有数据的方法
Jul 01 Javascript
jquery实现仿JqueryUi可拖动的DIV实例
Jul 31 Javascript
浅析Javascript的自动分号插入(ASI)机制
Sep 29 Javascript
基于jquery实现的银行卡号每隔4位自动插入空格的实现代码
Nov 22 Javascript
详解angular中的作用域及继承
May 31 Javascript
JS实现预加载视频音频/视频获取截图(返回canvas截图)
Oct 09 Javascript
Vue 组件修改根实例的数据的方法
Apr 02 Javascript
详解Vue项目引入CreateJS的方法(亲测可用)
May 30 Javascript
vue拖拽组件 vuedraggable API options实现盒子之间相互拖拽排序
Jul 08 Javascript
三剑客:offset、client和scroll还傻傻分不清?
Dec 04 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实现用户认证及管理完全源码
2007/03/11 PHP
Yii2中使用join、joinwith多表关联查询
2016/06/30 PHP
window.navigate 与 window.location.href 的使用区别介绍
2013/09/21 Javascript
3种不同方式的焦点图轮播特效分享
2013/10/30 Javascript
jquery 无限级下拉菜单的简单实现代码
2014/02/21 Javascript
ie9 提示'console' 未定义问题的解决方法
2014/03/20 Javascript
如何让浏览器支持jquery ajax load 前进、后退功能
2014/06/12 Javascript
JavaScript中的类数组对象介绍
2014/12/30 Javascript
JS实现iframe编辑器光标位置插入内容的方法(兼容IE和Firefox)
2016/06/24 Javascript
JQuery EasyUI学习教程之datagrid 添加、修改、删除操作
2016/07/09 Javascript
jquery判断对象是否为空并遍历对象的简单实例
2016/07/26 Javascript
Bootstrap Table服务器分页与在线编辑应用总结
2016/08/08 Javascript
浅谈jQuery绑定事件会叠加的解决方法和心得总结
2016/10/26 Javascript
浅谈vue的iview列表table render函数设置DOM属性值的方法
2017/09/30 Javascript
在vue里面设置全局变量或数据的方法
2018/03/09 Javascript
解决vue项目报错webpackJsonp is not defined问题
2018/03/14 Javascript
JS伪继承prototype实现方法示例
2018/06/20 Javascript
用原生 JS 实现 innerHTML 功能实例详解
2019/04/03 Javascript
vue data变量相互赋值后被实时同步的解决步骤
2020/08/05 Javascript
[10:34]DOTA2上海特级锦标赛全纪录
2016/03/25 DOTA
python实现绘制树枝简单示例
2014/07/24 Python
Python中分数的相关使用教程
2015/03/30 Python
利用Anaconda完美解决Python 2与python 3的共存问题
2017/05/25 Python
python实现串口自动触发工作的示例
2019/07/02 Python
Django models文件模型变更错误解决
2020/05/11 Python
Django使用rest_framework写出API
2020/05/21 Python
Scrapy 配置动态代理IP的实现
2020/09/28 Python
phpquery中文手册
2021/03/18 PHP
Moda Italia荷兰:意大利男士服装
2019/08/31 全球购物
System.Array.CopyTo()和System.Array.Clone()有什么区别
2016/06/20 面试题
外包公司软件测试工程师
2014/11/01 面试题
餐饮业员工工作决心书
2014/03/11 职场文书
2014年平安建设工作总结
2014/11/19 职场文书
高中生综合素质评价范文
2015/08/18 职场文书
jquery插件实现图片悬浮
2021/04/16 jQuery
Redis Cluster 字段模糊匹配及删除
2021/05/27 Redis