虽然是个很老的版本,但是优势是支持 清理缓存。同时没有什么太高的要求。
最近实现一个对话功能,需要能实现类似微信的上传录音功能。
录音好说,但是多次上传时,会报错,最终发现是线程被占用,释放做得不好啊。。
两个解决方案,修改原代码。用filereader代替。
简单解决。用filereader 读取录取后的文件,然后传到服务器。
代码如下:
获取文件内容
function getData(filepath, datacall, failcall) {
var path = filepath;
var level = "window.requestFileSystem";
if (typeof failcall != 'undefined') {
fail = failcall;
} else {
function fail(error) {
// console.log(evt);
// evt.target.
console
.log("gddebug file getData " + level + " fail "
+ error.code);
}
}
if (typeof datacall == 'undefined') {
datacall = function(data) {
};
}
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0,
function(fileSystem) {
level = "fileSystem.root.getFile";
console.log('gddebug fileSystem.root.getFile ' + path);
fileSystem.root.getFile(path, null, function(fileEntry) {
level = "fileEntry.file";
fileEntry.file(function(file) {
console.log("gddebug readAsDataURL");
var reader = new FileReader();
reader.onloadend = function(evt) {
console.log("gddebug" + "Read as data URL");
console.log("gddebug" + evt.target.result);
datacall(evt.target.result);
};
reader.readAsDataURL(file);
}, fail);
}, fail);
}, fail);
}
上传文件:
function uploadFile(url, filepath, wincall, failcall, calltype) {
if (typeof calltype == 'undefined') {
calltype = 'html';
}
filepath = filepath.replace(/^file:///, '');
getData(filepath, function(data) {
$.post(url, {
file : data,
filename : basename(filepath)
}, wincall, calltype);
}, failcall)
}
服务器解析代码:
if(isset($_POST['file'])){
if(empty($_POST['file'])){
sjson(false,$title,'');
}
$filepath='record/'.$_POST['filename'];
$_POST['file']=preg_replace('/^data:[^;]+?;base64,/','',$_POST['file']);
$_POST['file']=base64_decode($_POST['file']);
file_put_contents($filepath,$_POST['file']);
}
补充amr 转 mp3版本
if(isset($_POST['file'])){
if(empty($_POST['file'])){
sjson(false,$title,'');
}
$filepath='record/'.$_POST['filename'];
$_POST['file']=preg_replace('/^data:[^;]+?;base64,/','',$_POST['file']);
$_POST['file']=base64_decode($_POST['file']);
file_put_contents($filepath,$_POST['file']);
if(preg_match('/.amr/i',$filepath)){
$target_mp3=preg_replace('/.amr$/i','.mp3',$filepath);
//将amr转换成mp3
exec("java -jar amr.jar {$filepath} {$target_mp3}");
$filepath=$target_mp3;
}
$urlpath='http://192.168.0.144/test/phonegap/www/upload/'.$filepath;
sjson(true,$title,'',array('path'=>$urlpath,'html'=>$html));
}