php base64 转 amr,拿到了上传接口,参数是files,上传语音base64字符串的,已经成功把语音转base64,但是怎么上传到服务器呢???...

拿到了上传接口,参数是files,上传语音base64字符串的,已经成功把语音转base64,但是怎么上传到服务器呢???,下面是代码:

.fiexed-buttom {

position: fixed;

bottom: 30px;

left: 15px;

right: 15px;

}

录音

录制语音文件转base64字符串

base64字符串转成语音文件播放

!
手指上滑,取消发送

mui.init({

gestureConfig: {

tap: true, //默认为true

drag: true, //默认为true

hold: true, //默认为false,不监听

release: true //默认为false,不监听

}

});

var MIN_SOUND_TIME = 800;

var recorder = null;

var startTimestamp = null;

var stopTimestamp = null;

var stopTimer = null;

var recordCancel = false;

var files = [];

var soundAlert = document.getElementById("sound-alert");

var audioTips = document.getElementById("audio-tips");

// 控制录音弹出框是否播放

var setSoundAlertVisable = function(show) {

if(show) {

soundAlert.style.display = 'block';

soundAlert.style.opacity = 1;

} else {

soundAlert.style.opacity = 0;

// 完成再真正隐藏

setTimeout(function() {

soundAlert.style.display = 'none';

}, 200);

}

};

mui.plusReady(function() {

/**

* 录制语音文件转base64字符串

*/

// 按住录音(长按开始录音)

document.querySelector('#recorder').addEventListener('hold', function() {

recordCancel = false;

if(stopTimer) clearTimeout(stopTimer);

audioTips.innerHTML = "手指上划,取消发送";

soundAlert.classList.remove('rprogress-sigh');

setSoundAlertVisable(true);

// 获取当前设备的录音对象

recorder = plus.audio.getRecorder();

startTimestamp = (new Date()).getTime();

console.log("supportedFormats:" + JSON.stringify(recorder.supportedFormats));

recorder.record({

format: "amr",

filename: "_doc/audio/"

}, function(path) {

if(recordCancel) return;

console.log("path:" + path);

Audio2dataURL(path);

}, function(e) {

mui.toast("录音出现异常: " + e.message);

});

})

// 释放保存(松手保存)

document.querySelector('#recorder').addEventListener('release', function() {

if(audioTips.classList.contains("cancel")) {

audioTips.classList.remove("cancel");

audioTips.innerHTML = "手指上划,取消发送";

}

// 判断录音时间

stopTimestamp = (new Date()).getTime();

if(stopTimestamp - startTimestamp < 800) {

audioTips.innerHTML = "录音时间太短";

soundAlert.classList.add('rprogress-sigh');

recordCancel = true;

stopTimer = setTimeout(function() {

setSoundAlertVisable(false);

}, 800);

} else {

setSoundAlertVisable(false);

}

if(stopTimestamp - startTimestamp > 10000) { //10秒(待添加到限定时间自动结束)

audioTips.innerHTML = "录音时间结束";

soundAlert.classList.add('rprogress-sigh');

recordCancel = true;

stopTimer = setTimeout(function() {

setSoundAlertVisable(false);

}, 800);

} else {

setSoundAlertVisable(false);

}

recorder.stop();

})

// 拖动屏幕(手指上划,取消发送)

document.body.addEventListener('drag', function(event) {

if(Math.abs(event.detail.deltaY) > 50) {

if(!recordCancel) {

recordCancel = true;

if(!audioTips.classList.contains("cancel")) {

audioTips.classList.add("cancel");

}

audioTips.innerHTML = "松开手指,取消发送";

}

} else {

if(recordCancel) {

recordCancel = false;

if(audioTips.classList.contains("cancel")) {

audioTips.classList.remove("cancel");

}

audioTips.innerHTML = "手指上划,取消发送";

}

}

}, false);

/**

* 录音语音文件转base64字符串

* @param {Object} path

*/

function Audio2dataURL(path) {

plus.io.resolveLocalFileSystemURL(path, function(entry) {

entry.file(function(file) {

var reader = new plus.io.FileReader();

reader.onloadend = function(e) {

console.log(e.target.result);

alert(e.target.result)

files.push({

pic: e.target.result

});

};

reader.readAsDataURL(file);

}, function(e) {

mui.toast("读写出现异常: " + e.message);

})

})

}

function upload() {

mui.ajax('', {

dataType: 'json',

type: 'POST',

timeout: 60000,

crossDomain: true,

headers: {

'Content-Type': 'application/x-www-form-urlencoded'

},

data: {

files: files[0].pic //base64图片编码数据

},

success: function(data) {

wt.close();

outLine("上传状态:" + JSON.stringify(data));

// mui.openWindow({

// url:"uploader_ret.html"

// })

if(data.err_code == 0) {

alert("上传成功");

files = [];

$("#files").empty();

// plus.runtime.openURL('' + data.url); //浏览器打开上传的图片

// mui.openWindow({

// url: 'uploader_ret.html',

// })

} else {

alert("上传失败");

}

},

error: function(xhr, type, errorThrown) {

//异常处理;

wt.close();

alert("上传失败");

outLine(type + ": " + errorThrown);

// mui.openWindow({

// url: 'uploader_ret.html',

// })

}

});

}

/**

* base64字符串转成语音文件播放

*/

document.querySelector('#player').addEventListener('tap', function(e) {

// 语音文件dataURI

// var base64Str = 'data:audio/amr;base64,IyFBTVIKPJEXFr5meeHgAeev8AAAAIAAAAAAAAAAAAAAAAAAAAA8SHcklmZ54eAB57rwAAAAwAAAAAAAAAAAAAAAAAAAADxVAIi2Znnh4AHnz/AAAACAAAAAAAAAAAAAAAAAAAAAPEj5H5ZmeeHgAeeK8AAAAMAAAAAAAAAAAAAAAAAAAAA8CPlmkh3hIXBB58qREQnBLS2AJiaa8Vqa7gILj8G3gDxCdymROQIAABfzq88RwMhLefLr3vK3U6azfvq2nmHAPD72h50rSBEAHi+aAMR3ptW1FgXQIAf3RyrTkKRbVNA8RG5xjrpQA2Af58rpoypM11/kORggGJI0bKkO9aI3wDxEclqNTNoAgFMuupawKhLxonjKARrlXizd3p380vlAPEJoZ0PvUAFgHvfaQQNN2t5xEFKHP1urAHfDDXmGA4A8NHtpjqWEAOBSIPrEkpKP2HysXQprlqRKAXWT10+N0DyQY3GUbFABQB/vCmFBoBTVkGo8slIzg9wwUr/RvD3APAB7ZIjOyA5gH+fKwRKrZcdSOFwEx+Ze8g/wOCfNaAA8CARG6fxy/uA88Dp+Yugn8Wk/5KA9sbyxsvy/jRTRADwCDhY5+GPd4flQK/fVvOVSgXf7AIZEoon9+tA3MEDgPAgFpUn/9LXgzts6yb7dudC4IkGZo1Z5/90vmfbgtHA8Ag+dlgBn8EOE0UpIC35c9H+qChMrd7PFyCTBwv60MDwICD9OAGf64ePJOrcalLDNLS7ovC5JvE9mCWNelXgwPAIHy0yrH59Bj4BaI4qyP8Xt+4Qc4gfGkUBzQtfh3LA8CAhCQf2nxxQbKNpQLF/M/aPIom9Gf4PjhoHm3AlmsDwCBi1B89754PLEa2pTjxBEU2KJgXSHqNxALEnqcoJwPAQJp4nk7pfhyy+6FzAnVe2vj/kYCpudow+hkuBCaqA8BAmiWeAfXyGPLYu3hWWMRjRajOZDkCUUss+2yKJQ8DwCEDSRtU9O4fGHmmsTyCv60riXaHIP/Y0ae9yPV3LwPAgjnRnhh/yJYY0MUtwAMDpA4bxLil8Vor6diMJOFfA8Aj2jWeN28QH/hRTh60wbArI03gJuPTPDoL7SRUmskDzgSh4L5sctw9h1rQYDUMqwQW5eR+FuP9ZUE9iQQC2wPAhBlGnjYG0loy4EncjBPAPZExLaiekfQQ+6sJSh4IA8CFITYeZfZ6H9gbxPQBDr6vWF4k6J0ZOtHyzw2/vgYDwITbJp5kb0tKrRi2EWjYt8KSlbziAzEj+QA6Pv0ZswPARMDmHh++GFutEbMapR4XdZA1i03eV4A3TAoWH/WqA8CEAEYeN3aEPdjDt4rToGRiO0MRy7QkAWWFT0g4DoEDwIRAxh+J3hgc+Ma/1kshlSrWWKFIO1+QyfnfIiWsLQPAgiAmH+rB8B+4Nr5RddjHVBtf0SoHWEQSUCGLRgruA8AlILTgIXLMH7gXoyfRJg21YxPRQw5ig5Kx4Slkb2cDwIO75eDFR4wfDEGwOBYZ50KTm0PJ4LHYs4lPwT1iDwPAI2C0Ndrloh8VBq+t13NvJnBEP+W/HlAXR69mYDRiA8CEW2VgmNA0HwSmtAkCszS0MEkutOvmdBvYI6yKLkgA=='

var base64Str = e.target.result;

// 转成.amr文件播放

dataURL2Audio(base64Str, function(entry) {

var toURL = entry.toURL();

// 播放音频

playAudio(toURL);

})

})

})

/**

* 播放音频

* @param {Object} path

*/

function playAudio(path) {

var player = plus.audio.createPlayer(path);

player.play(function() {

mui.toast("播放成功");

}, function(e) {

mui.toast("播放失败");

});

}

/**

* base64字符串转成语音文件(参考http://ask.dcloud.net.cn/question/16935)

* @param {Object} base64Str

* @param {Object} callback

*/

function dataURL2Audio(base64Str, callback) {

var base64Str = base64Str.replace('data:audio/amr;base64,', '');

var audioName = (new Date()).valueOf() + '.amr';

plus.io.requestFileSystem(plus.io.PRIVATE_DOC, function(fs) {

fs.root.getFile(audioName, {

create: true

}, function(entry) {

// 获得平台绝对路径

var fullPath = entry.fullPath;

if(mui.os.android) {

// 读取音频

var Base64 = plus.android.importClass("android.util.Base64");

var FileOutputStream = plus.android.importClass("java.io.FileOutputStream");

try {

var out = new FileOutputStream(fullPath);

var bytes = Base64.decode(base64Str, Base64.DEFAULT);

out.write(bytes);

out.close();

// 回调

callback && callback(entry);

} catch(e) {

console.log(e.message);

}

} else if(mui.os.ios) {

var NSData = plus.ios.importClass('NSData');

var nsData = new NSData();

nsData = nsData.initWithBase64EncodedStringoptions(base64Str, 0);

if(nsData) {

nsData.plusCallMethod({

writeToFile: fullPath,

atomically: true

});

plus.ios.deleteObject(nsData);

}

// 回调

callback && callback(entry);

}

})

})

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值