// packageC/components/audio-upload/audio-upload.js var app = getApp(); Component({ /** * 组件的属性列表 */ properties: { }, /** * 组件的初始数据 */ data: { show: false, time: 0, localId: null, //返回音频的本地ID recordStop: true, timer: null, duration: 0, //录音时长 sec: 0, min: 0, recorderManager: null }, lifetimes: { // 生命周期函数,可以为函数,或一个在methods段中定义的方法名 attached() { this.data.recorderManager = wx.getRecorderManager(); this.data.recorderManager.onError((res) => { console.log(res); this.onDurationUpdate('clear'); app.tips('录音失败!'); }); this.data.recorderManager.onStop((res) => { if (!this.data.cancelStatus) { this.setData({ recordStop: true, src: res.tempFilePath, localId: res.tempFilePath }); console.log(res.tempFilePath, '上传的路径'); app.tips('录音完成!'); this.upVoice(); } else { app.tips('已取消录音!'); this.setData({ recordStop: true, show: false, duration: 0, sec: 0, min: 0 }); } this.data.cancelStatus = false; this.onDurationUpdate('clear'); }); this.data.recorderManager.onStart((res) => { this.setData({ recordStop: false }); this.onDurationUpdate('updata'); app.tips('开始录音,不宜超过10分钟'); }); this.data.recorderManager.onPause((res) => { this.setData({ recordStop: true }); this.onDurationUpdate('clear'); app.tips('录音已暂停'); }); this.data.recorderManager.onResume((res) => { this.setData({ recordStop: false }); this.onDurationUpdate('updata'); app.tips('录音继续'); }); }, moved() {}, detached() { if (this.data.timer) this.onDurationUpdate('clear'); }, }, /** * 组件的方法列表 */ methods: { getAudioFile() { wx.chooseMessageFile({ count: 1, type: 'file', extension: [".mp3", "mp3"], success: (res) => { this.uploadAudioM(res.tempFiles[0].path); }, fail: (err) => {} }); }, uploadAudioM(videoData) { let urlStr = app.getNetAddresss("upload.uploadPic"); urlStr += "&upload_type=audio"; wx.showLoading({ title: '上传中', }); wx.uploadFile({ url: urlStr, //仅为示例,非真实的接口地址 filePath: videoData, name: "file", formData: {}, success: (resdata) => { let res = JSON.parse(resdata.data); this.triggerEvent('uploaderAudio', res.data); if (res.result != 1) app.tips(res.msg); }, complete: () => { wx.hideLoading(); } }); }, openRecord() { this.setData({ show: true }); }, onDurationUpdate(status) { if (status == 'updata') { this.data.timer = setInterval(() => { if (this.data.duration >= 599) { this.stopRecord(); return; } this.data.duration += 1; this.transformTimes(); }, 1000); } else { if (this.data.timer) clearInterval(this.data.timer); } }, cancel() { this.data.cancelStatus = true; this.data.recorderManager.stop(); }, stopRecord() { this.data.recorderManager.stop(); }, startRecord() { if (this.data.duration > 0) { this.data.recorderManager.resume(); return; } this.data.recorderManager.start({ format: 'mp3' }); }, pauseRecord() { this.data.recorderManager.pause(); }, upVoice() { let wx_token = wx.getStorageSync('wx_token'); let urlStr = app.getNetAddresss('upload.uploadPic'); urlStr += "&upload_type=audio"; wx.showToast({ icon: 'loading', title: '正在上传' }), wx.uploadFile({ url: urlStr, filePath: this.data.localId, name: 'file', header: { "Content-Type": "multipart/form-data", Cookie: "PHPSESSID=" + wx_token, }, formData: { // 和服务器约定的token, 一般也可以放在header中 '_wx_token': wx.getStorageSync('wx_token') }, success: (res) => { var data = JSON.parse(res.data); if (data.result == 1) { wx.showModal({ title: '提示', content: data.msg, showCancel: false }); let _flie = data.data; _flie.duration = this.data.duration; this.triggerEvent('uploaderAudio', _flie); this.setData({ recordStop: true, show: false, duration: 0, sec: 0, min: 0 }); } else { wx.showModal({ title: '提示', content: data.msg || '错误', showCancel: false, }); } wx.hideToast(); }, fail: function (res) { console.log(res); wx.showModal({ title: '提示', content: '网络请求失败,请确保网络是否正常', showCancel: false, success: function (res) {} }); } }); }, transformTimes() { this.data.sec += 1; this.setData({ sec: this.data.sec }); if (this.data.sec >= 60) { this.data.min += 1; this.setData({ sec: 0, min: this.data.min }); } } } });