前提是app得实现录音拿到本地的地址
根据uniapp的官方文档来
地址:uni.getRecorderManager() | uni-app官网 (dcloud.net.cn)
先在data数据外按规定写三行代码
然后再你录音结束的事件中调官方api的方法,可以拿到本地地址
也就是onload这一块
async endRecognize(flag) {
// #ifdef APP-PLUS
plus.speech.stopRecognize();
// #endif
recorderManager.stop();
return new Promise((resolve, reject) => {
recorderManager.onStop(function(res) {
console.log('recorder stop' + JSON.stringify(res));
this.voicePath = res.tempFilePath;
resolve(this.voicePath); // 当onStop触发时,解析Promise
}.bind(this)); // 注意这里使用bind来确保this指向Vue实例
}).then((voicePath) => {
// 这里是onStop回调之后的逻辑,现在可以在这里安全地使用voicePath
// console.log(1111);
// console.log(this.voicePath);
this.sendMessage()
}).catch((error) => {
// 处理任何可能出现的错误
console.error('Error stopping recorder:', error);
});
},
recorderManager.stop();就是停止录音
recorderManager.onStop就是官方解释的录音停止的回调
这里用的异步,如果直接赋值会拿不到当前的地址
然后在then里面调发送方法即可
sendMessage() {
console.log('发送东西')
uploadRequest(this.voicePath, "user_voice").then(rees => {
console.log(rees)
// 直接调发送数据接口就可以了
rees就是上传到服务器的地址
})
},
主要的就是上传的封装,这里也是根据uniapp的uoload的上传做的一些改动
/**
* 文件上传公共方法
*
* @param image 本地图片路劲
* @param key 上传的类型,可问后端
*/
export const uploadRequest = (image, key) => {
return new Promise((resolve, reject) => {
var header = {
"X-Access-Token": uni.getStorageSync("token")
}
return uni.uploadFile({
url: baseURL + 'sys/common/upload',
filePath: image,
name: 'file',
header: header,
formData: {
'isup': 1,
'key': key
},
success: (res) => {
let mess = JSON.parse(res.data)
if (mess.success != true) {
return uni.showToast({
title: mess.message || '获取数据失败',
icon: 'none'
})
}
// 如果不满足上述判断就输出数据
resolve(mess.message)
},
// 这里的接口请求,如果出现问题就输出接口请求失败
fail: (err) => {
console.log('uploadImage fail', err)
reject(err)
}
})
})
}