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

  1. 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>
  1. demo.wxss
view{
  padding: 15px;
}
  1. 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("播放录音失败!")
        })

    }

})
  1. 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;
	}
}

效果

在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip数据采集并上传到后台.zip
### 回答1: ESP8266是一种功能强大的开发板,可作为微控制器单元(MCU)来采集温湿度数据,并通过OneNet平台进行上传。 首先,我们需要用ESP8266连接温湿度传感器,如DHT11或DHT22。这些传感器可以测量环境的温度和湿度,并将数据传输给ESP8266。 通过编程,我们可以配置ESP8266连接到Wi-Fi网络。使用ESP8266的Wi-Fi模块,我们可以连接到OneNet的服务器,以实现数据上传。我们需要向OneNet注册账户,创建设备和数据流,并获取其设备ID和API密钥。 在ESP8266的代码中,我们需要设置Wi-Fi连接,并使用HTTP协议将采集到的温湿度数据发送到OneNet的服务器。我们可以使用Arduino IDE进行编程,在代码中使用相应的库函数来实现这个过程。我们需要配置URL,包括OneNet的服务器地址、设备ID和API密钥。 在代码中,我们需要定义数据流的标识符,将温湿度数据放入HTTP请求中。通过使用POST请求,我们可以将数据上传到OneNet。在成功上传后,OneNet服务器将返回响应,以验证数据是否成功存储。 为了保证数据采集的准确性,我们可以设置一个定时器来定期进行数据采集和上传。例如,每隔一段时间,我们可以读取温湿度传感器的值,并将其发送到OneNet。 通过使用ESP8266作为MCU,我们可以实现温湿度数据的采集和上传到OneNet。这项工作使得我们可以方便地监测环境的温湿度,并在需要时进行远程访问和分析。同时,这也为其他应用程序(如智能家居或工业自动化)提供了数据支持。 ### 回答2: ESP8266 是一款高性能、低功耗的无线通信芯片,被广泛应用于物联网领域。作为 MCU,它具备了通过传感器采集温湿度数据的能力,并能够通过与OneNet云平台的连接实现将这些数据上传的功能。 首先,为了采集温湿度数据,可以使用ESP8266的GPIO口连接温湿度传感器模块,如DHT11或DHT22等,通过相应的引脚进行通信。ESP8266的固件支持OneWire协议和DHT库,可以方便地读取传感器的数值。 接下来,需要建立ESP8266与OneNet云平台的连接。可以使用ESP8266自带的Wi-Fi模块,连接到本地的无线网络,通过网络从OneNet云端接收及发送数据。使用OneNet提供的HTTP或MQTT协议,将采集到的温湿度数据上传到云端。 在代码编写方面,使用Arduino IDE等开发环境,结合ESP8266的开发库,可以轻松实现温湿度数据的采集和上传。通过编写相应的程序,将采集到的温湿度数据封装成JSON格式,再使用HTTP或MQTT协议将数据发送到OneNet云平台。 同时,为了确保数据的安全传输,可以使用HTTPS协议对数据进行加密传输,或者在设备和OneNet之间建立安全连接,确保数据的完整性和保密性。 总结来说,ESP8266作为MCU可以通过连接温湿度传感器采集数据,并通过与OneNet云平台的连接上传数据。这种方案使得我们可以远程监控和控制温湿度,实现物联网系统的自动化控制和数据采集。 ### 回答3: ESP8266是一种功能强大的微控制器单元(MCU),它集成了Wi-Fi功能,适用于物联网应用。使用ESP8266可以实现温湿度传感器的数据采集,并将数据上传到OneNet平台。 首先,我们需要连接温湿度传感器到ESP8266的GPIO引脚。常用的温湿度传感器有DHT11或DHT22。通过连接传感器的数据引脚到ESP8266的某个数字引脚,我们可以读取传感器返回的数据。 接下来,使用ESP8266的开发板和Arduino开发环境编写代码。我们可以使用ESP8266的库函数来读取传感器数据,并通过OneNet提供的API将数据上传到云平台。 首先,我们需要在代码中引入OneNet开发库,这样就能使用其提供的函数进行数据上传。然后,要先通过ESP8266连接到Wi-Fi网络,确保有互联网连接。 接下来,我们可以使用温湿度传感器的库函数来读取温湿度数据,并保存到变量中。接下来,调用OneNet库的上传数据函数,将温湿度数据发送到OneNet平台。 上传数据时,我们需要提供OneNet平台给我们分配的API密钥和设备ID。这些信息在OneNet的设备管理界面可以找到。 最后,在代码中使用延时函数进行循环读取和上传温湿度数据,或者使用中断方式进行异步数据采集和上传。 通过以上步骤,我们可以实现ESP8266作为MCU来采集温湿度数据,并将这些数据上传到OneNet物联网平台。这样,我们就可以通过OneNet的API接口,实时监测和分析温湿度数据,从而实现更多有用的功能,例如报警、数据可视化等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值