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


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 相关文章推荐
一个符号插入器 中用到的js代码
Sep 04 Javascript
详解强大的jQuery选择器之基本选择器、层次选择器
Feb 07 Javascript
禁止拷贝网页内容的js代码
Jan 22 Javascript
javascript实现下班倒计时效果的方法(可桌面通知)
Jul 10 Javascript
webpack配置的最佳实践分享
Apr 21 Javascript
在 Angular 中使用Chart.js 和 ng2-charts的示例代码
Aug 17 Javascript
在vue项目中使用md5加密的方法
Sep 14 Javascript
ES6入门教程之变量的解构赋值详解
Apr 13 Javascript
elementUI select组件value值注意事项详解
May 29 Javascript
在vue项目中使用sass语法问题
Jul 18 Javascript
vue在App.vue文件中监听路由变化刷新页面操作
Aug 14 Javascript
如何用vue实现网页截图你知道吗
Nov 17 Vue.js
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抓取https的内容的代码
2010/04/06 PHP
php实现的漂亮分页方法
2014/04/17 PHP
smarty模板引擎之配置文件数据和保留数据
2015/03/30 PHP
php中define用法实例
2015/07/30 PHP
php连接oracle数据库的方法(测试成功)
2016/05/26 PHP
thinkphp自带验证码全面解析
2016/09/18 PHP
PHP使用递归算法无限遍历数组示例
2017/01/13 PHP
Yii框架应用组件用法实例分析
2020/05/15 PHP
javascript 字符串连接的性能问题(多浏览器)
2008/11/18 Javascript
jQuery插件PageSlide实现左右侧栏导航菜单
2015/04/12 Javascript
推荐阅读的js快速判断IE浏览器(兼容IE10与IE11)
2015/12/13 Javascript
详解Angular2 之 结构型指令
2017/06/21 Javascript
JavaScript实现职责链模式概述
2018/01/25 Javascript
vue-cli扩展多模块打包的示例代码
2018/04/09 Javascript
linux 后台运行node服务指令方法
2018/05/23 Javascript
详解easyui基于 layui.laydate日期扩展组件
2018/07/18 Javascript
JS实现网站楼层导航效果代码实例
2020/06/16 Javascript
Python使用win32com实现的模拟浏览器功能示例
2017/07/13 Python
Python 实现微信防撤回功能
2019/04/29 Python
python调用摄像头拍摄数据集
2019/06/01 Python
详解pandas使用drop_duplicates去除DataFrame重复项参数
2019/08/01 Python
程序员的七夕用30行代码让Python化身表白神器
2019/08/07 Python
Django Admin中增加导出Excel功能过程解析
2019/09/04 Python
Pytorch中的VGG实现修改最后一层FC
2020/01/15 Python
Python 如何展开嵌套的序列
2020/08/01 Python
比利时买床:Beter Bed
2017/12/06 全球购物
法国最大电子商务平台:Cdiscount
2018/03/13 全球购物
英国家庭家具、照明和花园家具购物网站:Furniture123
2018/12/31 全球购物
阿迪达斯香港官网:adidas香港
2019/11/09 全球购物
管理学专业个人求职信范文
2013/12/13 职场文书
先进单位申报材料
2014/12/25 职场文书
学校节水倡议书
2015/04/29 职场文书
培根随笔读书笔记
2015/07/01 职场文书
运动会闭幕式通讯稿
2015/07/18 职场文书
Vue自定义铃声提示音组件的实现
2022/01/22 Vue.js
td 内容自动换行 table表格td设置宽度后文字太多自动换行
2022/12/24 HTML / CSS